汇编语言与接口技术(第四版)王让定

汇编作业

第一章

第二章

第三章

第四章

7.假设MYWORD是一个字变量,MYBYTE1和MYBYTE2是字节变量,指出下列语句中的错误原因。

(1)MOV  BYTE  PTR  [BX],1000

(2)MOV   BX, OFFSET[SI]

(3)CMP  MYBYTE1, MYBYTE2

(4)MOV  AL,MYBYTE1+ MYBYTE2

(5)SUB  AL,MYWORD

(6)JNZ  MYWORD

答:

(1)MOV BYTE PTRIBX,1000: 错误原因是1000是一个无效的字节值。字节值应该在0到255之间,所以无法将1000赋值给一个字节变量。

(2)MOV BX, OFFSET[SI]: OFFSET后面只能是标号或变量名

(3)CMP MYBYTE1,MYBYTE2:这条语句没有错误可以正确比较两个字节变量的值。

(4)MOV  AL,MYBYTE1+ MYBYTE2:MOV要求源操作数是一个可以直接获取数据的值,而不是两个字节变量相加的值,不能是一个表达式

(5)SUB AL,MYWORD: 错误原因是SUB指令只能用于两个字节或两个双字进行相减,无法直接将一个字与AL寄存器相减。

(6)JNZ MYWORD: 错误原因是JNZ指令的操作数应该是一个标号或者一个偏移量,而不是一个变量名。 

  1. 请给出下列语句中的指令立即数(数值表达式)的值。
  1. MOV AL,23H AND 45H OR 67H

首先计算23H AND 45H:

23H 的二进制表示为0010 0011

45H 的二进制表示为0100 0101

按位与运算:

0010 0011 AND 0100 0101 = 0000 0001(01H)

然后计算01H OR 67H:

01H 的二进制表示为0000 0001

67H 的二进制表示为0110 0111

按位或运算:

0000 0001 OR 0110 0111 = 0110 0111(67H)

  1. MOV AX,1234H/16+10H

结果:1234H/16 = 123H, 123H + 10H = 133H
因此,表达式的值为 133H。

  1. MOV AX,NOT(65535 XOR 1234H)

XOR是异或操作符,按位进行异或运算。

NOT是取反操65535 的十六进制表示为 FFFFH,1234H 的十六进制表示为 1234H。

进行异或运算:

FFFFH 的二进制表示为 1111 1111 1111 1111

1234H 的二进制表示为 0001 0010 0011 0100

异或运算结果:

1111 1111 1111 1111 XOR 0001 0010 0011 0100 = 1110 1101 1100 1011(EDCBH)

作符,按位进行取反运算

对 EDCBH 取反:

EDCBH 的二进制表示为 1110 1101 1100 1011

取反结果:

NOT(EDCBH) = 0001 0010 0011 0100(1234H)

  1. MOV AL,LOW 1234H OR HIGH 5678H

提取字节操作

对于十六进制数 1234H,其二进制表示为 0001 0010 0011 0100,按照 LOW 操作符的定义,它取的是低字节,所以 LOW 1234H 得到的值为 0011 0100(也就是 34H)。

对于十六进制数 5678H,其二进制表示为 0001 0101 0110 0111 1000,根据 HIGH 操作符的含义,它取的是高字节,所以 HIGH 5678H 得到的值为 0101 0110(即 56H)。

逻辑或运算

现在要对 LOW 1234H(34H)和 HIGH 5678H(56H)进行 OR(逻辑或)运算。

34H 的二进制表示为 0011 0100,56H 的二进制表示为 0101 0110。

按位进行逻辑或运算:

0011 0100 OR 0101 0110 = 0111 0110(也就是 76H)。

  1. MOV AX,23H SHL 4

SHL是逻辑左移操作符。它将操作数的二进制位向左移动指定的位数,右边空出的位用 0 填充。

23H 的二进制表示为0010 0011。

左移 4 位后,得到0010 0011 0000,即230H。

  1. MOV AX,1234H SHR 6

SHR是逻辑右移操作符。它将操作数的二进制位向右移动指定的位数,左边空出的位用 0 填充。

1234H 的二进制表示为0001 0010 0011 0100。

右移 6 位后,得到0000 0000 0100 1000,即48H。

  1. MOV AL,'A'  AND  (NOT  (A' -'A) )

首先,'A' - 'A'等于 0。

NOT 0等于FFH(因为 0 的二进制是0000 0000,取反后是1111 1111)。

'A'的 ASCII 码是41H,其二进制是0100 0001。

0100 0001 AND 1111 1111等于0100 0001,即41H。

  1. MOV AL,'H' OR 00100000B

'H'的 ASCII 码是48H,其二进制是0100 1000。

00100000B 的二进制是0010 0000。

进行OR操作:0100 1000 OR 0010 0000等于0110 1000,即68H。

  1. MOV AX,(76543 LT 32768) XOR 7654H

首先判断76543 LT 32768,76543 大于 32768,所以76543 LT 32768的值为 0。

0 的二进制是0000 0000 0000 0000。

7654H 的二进制是0111 0110 0101 0100。

进行XOR操作:0000 0000 0000 0000 XOR 0111 0110 0101 0100等于0111 0110 0101 0100,即7654H。

10.画图说明下列语句分配的存储空间及初始化的数据值

(1)BYTE_VAR DB 'ABC',10,10H,'EF',3 DUP  (-1,?,3 DUP (4) )

BYTE_VAR被定义为字节类型(DB)。

'ABC':这是三个字符,每个字符占一个字节,分别是41H('A')、42H('B')、43H('C')。

10:十进制数 10,十六进制为0AH,占一个字节。10H:十六进制数 16,占一个字节。

'EF':这是两个字符,分别是45H('E')、46H('F')。

3 DUP (-1,?,3 DUP (4)):-1:十六进制为FFH,占一个字节,重复 3 次。

?:这是未初始化的数据,占一个字节,重复 3 次。

3 DUP (4):4 的十六进制为04H,占一个字节,重复 3×3 = 9 次。

存储分配和初始化数据值:

存储顺序是:41H、42H、43H、0AH、10H、45H、46H、FFH(3 次)、?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lambertzzz1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值