(4)数据段有语句“H8843 DWORD 99008843H”,代码段指令“MOV CX, WORD PTR H8843”执行后,CX=_____________。
(5)用DWORD定义的一个变量XYZ,它的类型是_____________,用“TYPE XYZ”会得到数值为_____________。如果将其以字量使用,应该用_____________说明。
(6)数据段有语句“ABC BYTE 1,2,3”,代码段指令“MOV CL, ABC+2”执行后,CL=_____________。 〔解答〕
① BYTE,OFFSET ② 97,61,小写字母a
③ 0DH(13),0AH(10) ④ 8843H
⑤ DWORD,4,WORD PTR XYZ ⑥ 3 〔习题3.4〕
下列十六进制数表示无符号整数,请转换为十进制形式的真值: ① FFH ② 0H ③ 5EH ④ EFH 〔解答〕
① 255 ② 0 ③ 94 ④ 239 〔习题3.5〕
将下列十进制数真值转换为压缩BCD码: ① 12 ② 24 ③ 68 ④ 99 〔解答〕
① 12H ② 24H ③ 68H ④ 99H 〔习题3.6〕
将下列压缩BCD码转换为十进制数:
① 10010001 ② 10001001 ③ 00110110 ④ 10010000 〔解答〕
① 91 ② 89 ③ 36
- -6
④ 90 〔习题3.7〕
将下列十进制数用8位二进制补码表示: ① 0 ② 127 ③-127 ④ -57 〔解答〕
① 00000000 ② 01111111 ③ 10000001 ④ 11000111 〔习题3.8〕
进行十六进制数据的加减运算,并说明是否有进位或借位: ① 1234H+7802H ② F034H+5AB0H ③ C051H-1234H ④ 9876H-ABCDH 〔解答〕
① 1234H+7802H=8A36H,无进位 ② F034H+5AB0H=4AF4H,有进位 ③ C051H-1234H=BE1DH,无借位 ④ 9876H-ABCDH=ECA9H,有借位 〔习题3.10〕
设置一个数据段,按照如下要求定义变量或符号常量: ① my1b为字符串变量:Personal Computer ② my2b为用十进制数表示的字节变量:20 ③ my3b为用十六进制数表示的字节变量:20 ④ my4b为用二进制数表示的字节变量:20 ⑤ my5w为20个未赋值的字变量 ⑥ my6c为100的常量
⑦ my7c表示字符串:Personal Computer 〔解答〕
my1b byte 'Personal Computer' my2b byte 20 my3b byte 14h
my4b byte 00010100b my5w word 20 dup(?) my6c = 100
my7c equ
- -7
〔习题3.11〕定义常量NUM,其值为5;数据段中定义字数组变量DATALIST,它的头5个字单元中依次存放-10,2,5和4,最后1个单元初值不定。 〔解答〕 num equ 5 datalist
byte -10,2,5,4,?
〔习题3.12〕从低地址开始以字节为单位,用十六进制形式给出下列语句依次分配的数值:
byte 'ABC',10,10h,'EF',3 dup(-1,?,3 dup(4)) word 10h,-5,3 dup(?) 〔解答〕
41 42 43 0A 10 45 46 FF 00 04 04 04 FF 00 04 04 04 FF 00 04 04 04 10 00 FB FF 00 00 00 00 00 00
〔习题3.19〕请分别用一条汇编语言指令完成如下功能:(去E)
(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。 (2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。
(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。 (5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。 〔解答〕 ① add edx,ebx ② add al,[ebx+esi] ③ add [bx+0b2h],cx ④ add varw,3412h ⑤ add eax,0a0h
〔习题3.20〕分别执行如下程序片断,说明每条指令的执行结果:(去E)
(1)
mov eax,80h add eax,3 add eax,80h adc eax,3 (2)
mov eax,100
; EAX=__________ ; EAX=__________,CF=__________,SF=__________ ; EAX=__________,CF=__________,OF=__________ ; EAX=__________,CF=__________,ZF=__________ ; EAX=__________
- -8
add ax,200 ; EAX=__________,CF=__________ (3) mov eax,100 ; EAX=__________ add al,200 ; EAX=__________,CF=__________
(4) mov al,7fh ; AL=__________ sub al,8 ; AL=__________,CF=__________,SF=__________ sub al,80h ; AL=__________,CF=__________,OF=__________ sbb al,3 ; AL=__________,CF=__________,ZF=__________ 〔解答〕
(1) ; EAX=80H ; EAX=83H,CF=0,SF=0 ; EAX=103H,CF=0,OF=0 ; EAX=106H,CF=0,ZF=0
(2) ; EAX=100 ; EAX=300,CF=0
(3) ; EAX=100 ; EAX=44,CF=1(包含256的进位含义:256+44=300)
(4) mov al,7fh ; AL=7FH sub al,8 ; AL=77H,CF=0,SF=0 sub al,80h ; AL=F7H,CF=1,OF=1 sbb al,3 ; AL=F3H,CF=0,ZF=0 〔习题3.21〕(推敲)
给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:
mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc al
; AL=89H CF ZF SF OF PF ; AL=12H 1 0 0 1 1
- -9
〔解答〕
mov al,89h add al,al
add al,9dh cmp al,0bch sub al,al dec al inc al ; AL=0AFH ; AL=0AFH ; AL=00H ; AL=0FFH ; AL=00H 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 1 1
〔习题3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成EDX.EAX←buffer1-buffer2功能。(去E) 〔解答〕 ; 数据段 buffer1 qword 67883000h buffer2 qword 67762000h ; 代码段 mov eax,dword ptr buffer1 mov edx,dword ptr buffer1+4 sub eax,dword ptr buffer2 sbb edx,dword ptr buffer2+4
〔习题3.23〕分别执行如下程序片断,说明每条指令的执行结果:(去E)
(1)
mov esi,10011100b ; ESI=__________H and esi,80h ; ESI=__________H or esi,7fh ; ESI=__________H xor esi,0feh ; ESI=__________H (2)
mov eax,1010b ; EAX=__________B shr eax,2 ; EAX=__________B,CF=__________ shl eax,1 ; EAX=__________B,CF=__________ and eax,3 ; EAX=__________B,CF=__________ (3)
mov eax,1011b ; EAX=__________B rol eax,2 ; EAX=__________B,CF=__________ rcr eax,1 ; EAX=__________B,CF=__________ or eax,3 ; EAX=__________B,CF=__________ (4)
xor eax,eax ; EAX=__________,CF=__________,OF=__________
- -10