SEGMENT伪指令说明

原文链接: http://www.cnblogs.com/pengshao/archive/2011/08/06/2129518.html

语法:





segment-name SEGMENT [align] [combine] ['class']
segment-nam ends

[align]选项指明段开始边界,典型要求是para,它使段定位在在小段的边界。起码地址正好被16/10H整除,可以省略,默认为para
[combine]组合 决定本段是否要和其它段组合在一起,
组合类型:STACK,COMMON,PUBLIC,
[
'Class']连接时用于相关段组合在一起,如代码段‘code’,数据段 'Data',堆栈段'Stack'

PAGE
60,132 ;页面大小
TITLE A04ASM1 (EXE) Move and add operations ;标题
;
---------------------------------------------

STACK SEGMENT PARA STACK
'Stack' ;堆栈段
DW 32 DUP(0)
STACK ENDS
; ----------------------------------------------
DATASEG SEGMENT PARA 'Data' ;数据段
FLDD DW 215 ;DW(double word)双字 16位
FLDE DW 125
FLDF DW ?
DATASEG ENDS
; -----------------------------------------------
CODESEG SEGMENT PARA 'Code' ;代码段
MAIN PROC FAR
ASSUME
SS:STACK,DS:DATASEG,CS:CODESEG
MOV AX,DATASEG ;取得数据段基址
mov DX,AX

mov AX,FLDD ;取得FLDD单元偏移地址[0000] (IP)=(IP)+0003
ADD AX,FLDE ;对[AX]进行加法操作 (AX)=(AX)+0002 (IP)=(IP)+0003
MOV FLDF,AX
MOV AX,4c00h
int 21h
MAIN endp
CODESEG ENDS
end MAIN

反汇编得到

写更少的代码

 1                PAGE 60132
2 TITLE A04ASM2(EXE) Move and Add Operations ;标题
3
4 ;------------------------------------------------------------------------
5 ;使用.Model 自动生成SEGMENT
6 ;存储模型分为 small Medium Compact Large Huge
7 ;-------------------------------------------------------------------------
8 .MODEL SMALL
9 .STACK 64
10 .DATA
11 FLDD DW 215 ;DW(double word)双字 16位
12 FLDE DW 125
13 FLDF DW ?
14
15 ;---------------------------------------------------------------------------
16 .CODE
17
18 MAIN PROC FAR
19
20 MOV AX,@DATA
21 MOV DS,AX
22 MOV DS,AX
23
24 MOV AX,FLDD
25 ADD AX,FLDE
26 MOV FLDF,AX
27
28 MOV AX,4C00H
29 INT 21H
30
31 MAIN endp ;过程结束
32 END MAIN ;程序结束

转载于:https://www.cnblogs.com/pengshao/archive/2011/08/06/2129518.html

猜你喜欢

转载自blog.csdn.net/weixin_30399155/article/details/94794881