1.为什么要用 ASSUME语句 指令 mov bl, xd mov xe, bl 被汇编为 mov bl, byte te ptr[0000h mov byte ptr es: 0000h, bl 其中,在变量xe前增加了段超越前缀ES:,这就是 ASSUME的作用,也仅此而已 2.设置段寄存器的初值 (1)CS与IP CS与P的初值不能在程序中显示设置,由系统自动设 置为END后指定的起始地址
1.为什么要用ASSUME语句 指令 mov bl,xd mov xe,bl 被汇编为 mov bl,byte ptr[0000h] mov byte ptr es:[0000h],bl 其中,在变量xe前增加了段超越前缀ES:,这就是 ASSUME的作用,也仅此而已。 2.设置段寄存器的初值 (1)CS与IP CS与IP的初值不能在程序中显示设置,由系统自动设 置为END后指定的起始地址
(2)DS和ES、 DS和ES的初值必须在程序中设置。 设置方法如下: MOV AX, SEG NAME MOV DS, AX (3)SS与SP SS与SP初值的设置方法有下列两种: 在程序中显示设置,类似于DS,例如: MOV AX, SSEG MOV SS, AX MOV SP, ST TOP 若堆栈段定义时给出了参数 STACK,则连接器LNK 自动将SS:SP指向栈底; 若未定义堆栈段,则由系统指定堆栈,SS:SP也由 系统自动设置
(2)DS和ES、 DS和ES的初值必须在程序中设置。 设置方法如下: MOV AX,SEG NAME MOV DS,AX (3)SS与SP SS与SP初值的设置方法有下列两种: 在程序中显示设置,类似于DS,例如: MOV AX,SSEG MOV SS,AX MOV SP,ST_TOP 若堆栈段定义时给出了参数STACK,则连接器LINK 自动将SS:SP指向栈底; 若未定义堆栈段,则由系统指定堆栈,SS:SP也由 系统自动设置
「例42:在数据段定义首地址为A的10个字符,将这10 个字符以相反次序传送到附加段首地址为B的内存单元 中 DSEG SEGMENT ADB412345678903 DSEG ENDS ESEG SEGMENT B DB 10 DUP() ESEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG ES: ESEG START: MOV AX, DSEG MOV DS, AX
[例4.2]:在数据段定义首地址为A的10个字符,将这10 个字符以相反次序传送到附加段首地址为B的内存单元 中。 DSEG SEGMENT A DB ‘1234567890’ DSEG ENDS ESEG SEGMENT B DB 10 DUP(?) ESEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG START: MOV AX,DSEG MOV DS,AX
MOV AX, ESEG MOV ES, AX LEA SI A LEA DI B Add DI 9 MOV CX, 10 MOVE: CLD LODSB STD STOSB LOOP MOVE MOV AH, 4CH nT 21H CSEG ENDS END START
MOV AX,ESEG MOV ES,AX LEA SI,A LEA DI,B ADD DI,9 MOV CX,10 MOVE: CLD LODSB STD STOSB LOOP MOVE MOV AH,4CH INT 21H CSEG ENDS END START
4、3汇编语言的运算符 1.算术运算符 算术运算符主要包括+、一、*、/和MOD、Ⅱ等。其中 MOD是指除法运算后得到的余数。 语法格式为: exprI|expr2等价于 exprI+expr2 2.逻辑运算符 逻辑运算符主要包括AND、OR、XOR、NOT、SHR及 SHL。逻辑操作符是按位操作的,它只能用于数字表达 式中。 3.关系运算符 关系运算符主要包括EQ(相等时为真)、NE(不相等 时为真)、LT(小于时为真)、GT(大于时为真) LE(小于或等于时为真)、GE(大于或等于时为真) 等6种
4、3 汇编语言的运算符 1.算术运算符 算术运算符主要包括+、-、* 、/和MOD、[]等。其中 MOD是指除法运算后得到的余数。 语法格式为: expr1[expr2]等价于expr1+expr2。 2.逻辑运算符 逻辑运算符主要包括AND、OR、XOR、NOT、SHR及 SHL。逻辑操作符是按位操作的,它只能用于数字表达 式中。 3.关系运算符 关系运算符主要包括EQ(相等时为真)、NE(不相等 时为真)、LT(小于时为真)、GT(大于时为真)、 LE(小于或等于时为真)、GE(大于或等于时为真) 等6种