① 没有。使用二进制8位表达无符号整数,257没有对应的编码。 ② 字符“'F'”的ASCII码就是数值46H,所以没有区别。
③ 汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。
④ 不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。 ⑤ 源、目标寄存器位数不同,不能用该指令进行数据交换。
⑥ 前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。
⑦ INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。 ⑧ 大小写字母转换利用它们的ASCII码相差20H。
⑨ 加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和OF标志,可利用CF和OF进行区别。
⑩ 逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。 〔习题3.2〕判断题 〔解答〕
① 对 ⑥ 对
② 对 ⑦ 错 ③ 对 ⑧ 错 ④ 错 ⑨ 对 ⑤ 错 ⑩ 对
〔习题3.3〕填空题
〔解答〕
① BYTE,OFFSET ② 97,61,小写字母a
③ 0DH(13),0AH(10) ④ 8843H
⑤ DWORD,4,WORD PTR XYZ ⑥ 3
⑦ 78894111 ⑧ 0,0,0
⑨ 0123456788765432H,83H ⑩ 4 〔习题3.4〕
下列十六进制数表示无符号整数,请转换为十进制形式的真值: ① FFH ② 0H ③ 5EH ④ EFH 〔解答〕
① 255 ② 0 ③ 94 ④ 239 〔习题3.5〕
将下列十进制数真值转换为压缩BCD码: ① 12 ② 24 ③ 68 ④ 99 〔解答〕
- -9
① 12H ② 24H ③ 68H ④ 99H 〔习题3.6〕
将下列压缩BCD码转换为十进制数:
① 10010001 ② 10001001 ③ 00110110 ④ 10010000 〔解答〕
① 91 ② 89 ③ 36 ④ 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.9〕
数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码0DH和0AH分别对应什么字符? 〔解答〕
数码0~9对应的ASCII码依次是30H~39H。
大写字母A~Z对应的ASCII码依次是:41H~5AH。 小写字母a~z对应的ASCII码依次是:61~7AH。 ASCII码0DH和0AH分别对应的是回车和换行字符。 〔习题3.10〕
设置一个数据段,按照如下要求定义变量或符号常量:
- -10
① my1b为字符串变量:Personal Computer ② my2b为用十进制数表示的字节变量:20 ③ my3b为用十六进制数表示的字节变量:20 ④ my4b为用二进制数表示的字节变量:20 ⑤ my5w为20个未赋值的字变量 ⑥ my6c为100的常量
⑦ my7c表示字符串:Personal Computer 〔解答〕
my1b my2b my3b my4b my5w my6c my7c
byte 'Personal Computer' byte 20 byte 14h
byte 00010100b word 20 dup(?) = 100
equ
〔习题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.13〕
设在某个程序中有如下片段,请写出每条传送指令执行后寄存器EAX的内容:
varw varb vard buff mess
; 数据段 org 100h
word 1234h,5678h byte 3,4
dword 12345678h byte 10 dup(?) byte 'hello' ; 代码段
mov eax,offset mess
mov eax,type buff+type mess+type vard
mov eax,sizeof varw+sizeof buff+sizeof mess mov eax,lengthof varw+lengthof vard
〔解答〕
① EAX=0114H ② EAX=0006H
- -11
③ EAX=0013H ④ EAX=0003H 〔习题3.14〕
按照如下输出格式,在屏幕上显示ASCII表: | 0 1 2 3 4 5 6 7 8 9 A B C D E F ---+-------------------------------- 20 | ! “ # ... 30 | 0 1 2 3 ... 40 | @ A B C ... 50 | P Q R S ... 60 | ‘ a b c ... 70 | p q r s ...
表格最上一行的数字是对应列ASCII代码值的低4位(用十六进制形式),而表格左边的数字对应行ASCII代码值的高4位(用十六进制形式)。编程在数据段直接构造这样的表格、填写相应ASCII代码值(不是字符本身),然后使用字符串显示子程序DISPMSG实现显示。 〔解答〕
include io32.inc .data table byte ' |0 1 2 3 4 5 6 7 8 9 A B C D E F',13,10 byte '---+-------------------------------',13,10 byte
|',20h,20h,21h,20h,22h,20h,23h,20h,24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20h byte 2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h,2fh,20h,13,10 byte
|',30h,20h,31h,20h,32h,20h,33h,20h,34h,20h,35h,20h,36h,20h,37h,20h,38h,20h,39h,20h byte 3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h,3fh,20h,13,10 byte
|',40h,20h,41h,20h,42h,20h,43h,20h,44h,20h,45h,20h,46h,20h,47h,20h,48h,20h,49h,20h byte 4ah,20h,4bh,20h,4ch,20h,4dh,20h,4eh,20h,4fh,20h,13,10 byte
|',50h,20h,51h,20h,52h,20h,53h,20h,54h,20h,55h,20h,56h,20h,57h,20h,58h,20h,59h,20h byte 5ah,20h,5bh,20h,5ch,20h,5dh,20h,5eh,20h,5fh,20h,13,10 byte
|',60h,20h,61h,20h,62h,20h,63h,20h,64h,20h,65h,20h,66h,20h,67h,20h,68h,20h,69h,20h byte 6ah,20h,6bh,20h,6ch,20h,6dh,20h,6eh,20h,6fh,20h,13,10 byte
|',70h,20h,71h,20h,72h,20h,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20h byte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10 byte 0 .code start: mov eax,offset table call dispmsg exit 0 end start
'20
'30
'40
'50
'60
'70
〔习题3.15〕
数据段有如下定义,IA-32处理器将以小端方式保存在主存:
- -12