汇编语言问题`基础!高分

1关系运算符的两个操作数必须是数据,或是统一段内的两个存储单元的地址。进行关系运算后的比较操作后,结果是一个数值,若输出为0 ,则是0FFH或者0FFFFH! 请问输出为0 为什么是后面两个。
2 MOV AL, NOT 0FFH
MOV BL,8CH AND 73H
MOV AH ,8CH OR 73H
MOV CH ,8CH XOR 73H
汇编时 计算表达式形成指令为
MOV AL,0
MOV BL,0
MOV AH ,0FFH
MOV CH ,0FFH
请解释一下第二个程序的每个句子的意思 或结果是怎么来的
3逻辑运算符与8086指令系统中的指令助记符AND 0R
符号完全相同,但是二者是不会混淆的。作为MASM的运算符是在汇编过程中进行计算的,而指令助记符是在程序执行时进行计算的。请问汇编过程和程序执行的区别!
4请问 指令 机器码 会 汇编语言的 异同!

1
关系运算符的两个操作数必须是数据,或是统一段内的两个存储单元的地址。进行关系运算后的比较操作后,结果是一个数值,若输出为0 ,则是0FFH或者0FFFFH! 请问输出为0 为什么是后面两个。
--?

2
MOV AL, NOT 0FFH
MOV BL,8CH AND 73H
MOV AH ,8CH OR 73H
MOV CH ,8CH XOR 73H

汇编时 计算表达式形成指令为
MOV AL,0----NOT 0FFH=0
MOV BL,0----8CH AND 73H=0
MOV AH ,0FFH--8CH OR 73H=0FFH
MOV CH ,0FFH--8CH XOR 73H=0FFH

请解释一下第二个程序的每个句子的意思 或结果是怎么来的
8CH AND 73H=0
8CH =1000 1100B AND 0111 0011B,对位相乘,可得0000 0000B
其它的,算法雷同。

3
逻辑运算符与8086指令系统中的指令助记符AND 0R 符号完全相同,但是二者是不会混淆的。
作为MASM的运算符是在汇编过程中进行计算的,而指令助记符是在程序执行时进行计算的。
请问汇编过程和程序执行的区别!
--汇编过程,现在都是利用软件进行。
--早期,是人工查表、计算,把一条条指令的助记符,变成一句句的机器码。

--程序执行,是由 CPU 执行机器码。

4请问 指令、机器码、汇编语言的 异同!
--指令,可以写成机器码,也可以写成助记符,是用来控制 CPU 进行各种操作的。
--汇编语言,是指令、伪指令,各种规则、语法的统称。追问

若输出为0 ,则是0FFH或者0FFFFH!为什么是0FFH或者0FFFFH?这两个换成2进制不是0啊!谢谢!完成后有加分!

追答

楼主,是从哪儿找来的这句话?

不知道出处,不知道上下文,难以解释。

追问

不好意思
1关系运算符的两个操作数必须是数据,或是统一段内的两个存储单元的地址。进行关系运算后的比较操作后,结果是一个数值,若输出为0 ,则是0FFH或者0FFFFH! 请问输出为0 为什么是后面两个。
就是这句话 若输出为0 则是0FFH 为什么输出是0则是0FFH,就这个意思!出处就是周荷琴的微机原理与接口技术的第129页的最下面一段,我认为就看这句话本身就可以理解了。只是我有点疑问。谢谢!

追答

……进行关系运算后的比较操作后,结果是一个数值,若输出为0 ,则是0FFH或者0FFFFH! ……

关系运算《后的比较操作后》、《结果》、《输出》、0、0FFFFH,

不知道周荷琴说的这些,都是什么。

有两个《后》,好像,用的语法,都不正常。

是多了字,还是少了字?

大概是印刷错误吧。

追问

2 MOV AL, NOT 0FFH
MOV BL,8CH AND 73H
MOV AH ,8CH OR 73H
MOV CH ,8CH XOR 73H
汇编时 计算表达式形成指令为
MOV AL,0
MOV BL,0
MOV AH ,0FFH
MOV CH ,0FFH
我想问的是这里的上下两段是怎么变过来的 NOT 0FFH 为什么是0 还有后面的也是!谢谢!

追答

MOV AL, NOT 0FFH

NOT,是《取反》。
FF = 1111 1111,取反,就是 0000 0000。

即有:
MOV AL, 0

-----------------
MOV BL,8CH AND 73H

8CH =1000 1100B
73H = 0111 0011B

与,就是对位相乘,可得 0000 0000B

8CH AND 73H=0000 0000B

即有:
MOV BL, 0

-----------------
其它的,算法雷同。

你把二进制数字列出来,算一算就知道了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-09
1、2. 这里的位运算运算在进行汇编器的“预处理”时就计算完了,写如机器码时直接写的立即数而没有表达式。属于优化。好比C语言中间 printf("%d",1+2);会直接先处理成printf("%d",3);
以8CH OR 73H为例,
如果用ah、ch等8bit寄存器,会得 FFH,
如果用ax、cx等16bit寄存器,会得 FFFFH,
3、masm在预编译阶段的逻辑指令应该和x86指令一样,对操作数的每一个bit进行比较。
4、机器码就是几个字节数据,而汇编语言是英文助记符的源代码文本。
比如“24 0F”两个字节的数据翻译成汇编代码就是“AND AL,0FH”
宏汇编语言加上了各种预定义的宏,指令所占的内存位置也在汇编翻译时才确定。追问

2 MOV AL, NOT 0FFH
MOV BL,8CH AND 73H
MOV AH ,8CH OR 73H
MOV CH ,8CH XOR 73H
汇编时 计算表达式形成指令为
MOV AL,0
MOV BL,0
MOV AH ,0FFH
MOV CH ,0FFH
我想问的是这里的上下两段是怎么变过来的 NOT 0FFH 为什么是0 还有后面的也是!谢谢!

追答

1111 1111 按位求非NOT运算得0000 0000.....

本回答被网友采纳
相似回答