4道汇编 有答案,就想分析下为什么

来源:百度知道 编辑:UC知道 时间:2024/06/22 07:42:09
5.假定AX=96H,BX=65H,依次执行ADD AX,BX和DAA指令后,AL= 161H 。
6.执行以下程序段后
MOV AL,10
SHL AL,1
MOV BL,AL
SHL AL,1
SHL AL,1
ADD AL,BL
写出AL= 64H 。
7.执行以下程序段后
MOV AL,87
MOV CL,4
MOV AH,AL
AND AL,0FH
OR AL,30H
SHR AH,CL
OR AH,30H
写出AX= 3537 H。
8.执行以下程序段后
STR1 DW ‘AB’
STR2 DB 16DUP(?)
CNT EQU $-STR1
MOV CX,CNT
写出CX= 12H 。

有些答案是错误的!!
----------------------------------
5.假定AX=96H,BX=65H,依次执行ADD AX,BX和DAA指令后,AL= 161H 。
这个答案不可能!!AL是8位寄存器,你的答案已经超过8位了!!正确的理解,答案应该是AL=61H,CF=1,AF=1,这里CF的1指的就是161中的100.
解答过程: 执行ADD AX,BX指令后,实际就是(AX)+(BX)=0096H+0065H,结果保存在AX中=00FBH,AF=1,DAA指令是压缩BCD码的调整指令,只针对AL寄存器有用,按调整规则,因为AL的高低四位都大于9,所以AL的高低四位各加6,于是结果就是FBH+66H=61H,CF=1,AF=1,这里的CF=1就指本来结果中161的那个100,AL中的61H就指本来结果中161的61部分.
---------------
这个题以及以下的题目,你都可以在WINDOWS系统自带的DEBUG软件里予以验证.
___________________________________________
6.执行以下程序段后
MOV AL,10 ; AL = 0000 1010B
SHL AL,1 ; AL逻辑左移一位,低位补0,AL= 0001 0100B
MOV BL,AL ; BL=0001 0100B
SHL AL,1 ; AL再逻辑左移一位,AL = 0010 1000B
SHL AL,1 ; 同样, AL= 0101 0000B
ADD AL,BL ; AL与BL相加,50H+14H=64H
写出AL= 64H 。
-------------------------------------------
7.执行以下程序段后
MOV AL,87 ;AL= 0101 0111B ,把10进制转为2进制的结果
MOV CL,4 ;CL= 0000 0100B
MOV AH,AL ;AH= 0101 0111B
AND