最近学汇编,看了些题,有些不明白。 解释的越详细越好!
---------------------------------------------------------
1、 .DA – BYTE EQU THIS BYTE
DA –WORD DW ′AB′,′CD′,′EF′,′GH′
. . . . . . . .
MOV AL , DA–BYTE + 3
MOV AH, BYTE PTR DA–WORD + 4
上述二条传送指令执行后AX 中的内容是(D )
A .′DE′ B .′HC′ C .′CF′ D .′FC′
2、完成将累加器AL 清零, 并使进位标志CF 清零, 下面错误的指令是(A )
A .MOV AL, 00H B .AND AL , 00H
C .XOR AL ,AL D .SUB AL, AL
3、执行下面的程序段后, (AX) = ( B)
TAB DW 1 , 2 , 3 , 4 , 5 , 6
ENTRY EQU 3
MOV BX, OFFSET TAB
ADD BX, ENTRY
MOV AX, [ BX]
A .0003H B .0300H
C .0400H D .0004H
4、MOV AL , 79
ADD AL, 0B1H
指令执行后, 设置的标志位CF 和OF 的值是(D )
A .CF = 0 OF = 1 B .CF = 1 OF = 1 C .CF = 0 OF = 0 D .CF = 1 OF = 0
5、25 . DABY1 DB 12H, 34H , 56H , 78H
DB $ - DABY1
DABY2 DB 10H DUP (1 , 2 , 3 )
…
MOV DX, SIZE DABY1
ADD DX, WORD PTR DABY1 + 4
上述指令序列执行后, DX 的内容是( C)
A .05H B .1005H C .0105H D .0202H
------解决方案--------------------------------------------------------
第二题:因为MOV指令虽然能将AL清零,但MOV指令不会影响CF标志寄存器
第五题:SIZE是求 DABY1的字节,因为是DB,DB为1个字节,所以MOV DX, SIZE DABY1 (DX) = 1
DB $ - DABY1 表示当前地址减去 DABY1 的首地址,也就是求 DABY1 的长度(Length)
得出的值是4
ADD DX, WORD PTR DABY1 + 4,表示将(DX)加上DABY1开始的第4个位置的值,注意,位置是从0开始算起的,所以12H, 34H , 56H , 78H 分别为0、1、2、3,那么位置4就是DB $ - DABY1 求出的值,前面已经说过了,得出的值是4(也为04H)。
因为是WORD PTR ,所以还需要一个字节,也就是需要DB $ - DABY1,以及它下面的一个字节,那么DB $ - DABY1下面是DABY2 DB 10H DUP (1 , 2 , 3 ),也就是1、2、3、1、2、3(重复10次)这些 数,我们只需要第一个,第一个为1(01H)
这样两个值就知道了,一个是DB $ - DABY1 ,值为04H,另一个是01H。注意01是高字节,要放在高位,所以组合他们成为:0104H
现在可以简化成ADD DX, 0104H
前面已经知道DX的值为1
ADD,是加法,所以0104H加上1,的值为0105H,所以DX的值现在为0105H
------解决方案--------------------------------------------------------
第二题:因为MOV指令虽然能将AL清零,但MOV指令不会影响CF标志寄存器
第五题:SIZE是求 DABY1的字节,因为是DB,DB为1个字节,所以MOV DX, SIZE DABY1 (DX) = 1
DB $ - DABY1 表示当前地址减去 DABY1 的首地址,也就是求 DABY1 的长度(Length)
得出的值是4
ADD DX, WORD PTR DABY1 + 4,表示将(DX)加上DABY1开始的第4个位置的值,注意,位置是从0开始算起的,所以12H, 34H , 56H , 78H 分别为0、1、2、3,那么位置4就是DB $ - DABY1 求出的值,前面已经说过了,得出的值是4(也为04H)。
因为是WORD PTR ,所以还需要一个字节,也就是需要DB $ - DABY1,以及它下面的一个字节,那么DB $ - DABY1下面是DABY2 DB 10H DUP (1 , 2 , 3 ),也就是1、2、3、1、2、3(重复10次)这些 数,我们只需要第一个,第一个为1(01H)
这样两个值就知道了,一个是DB $ - DABY1 ,值为04H,另一个是01H。注意01是高字节,要放在高位,所以组合他们成为:0104H
现在可以简化成ADD DX, 0104H
前面已经知道DX的值为1
ADD,是加法,所以0104H加上1,的值为0105H,所以DX的值现在为0105H