鱼C论坛

 找回密码
 立即注册
查看: 2947|回复: 2

在网上找的汇编练习题,有几个题比较疑惑,求解(答案在2楼,很详细)

[复制链接]
发表于 2012-8-15 16:24:43 | 显示全部楼层
本帖最后由 lukelqz 于 2012-8-15 16:32 编辑

3、
cmp是比较指令,cmp的功能相当于减法,但是不保存结果,执行后,会对标志寄存器产生影响。
cf是进位标志位,它默认是把数据当作无符号数运算,如果运算的结果的最高有效位向更高位进位或借位,那么,它为1。
of是溢出标志位,默认进行的是有符号数的运算,如果运算结果超出了寄存器所能表示的有符号数的范围,那么,它为1。比如8位寄存器的范围为:-128~127,16位的为-32768~32767 这个知识得比较熟悉补码。

这题cmp本来就不保存结果,bx就不一定为0,所以D不对。要让cf不为0,那么就要cmp前面的参数大于后面的参数。要让of不为0,那么就要有符号数的相减结果,不在-32768~32767这个范围内,因为bx是16位的。

参考资料:王爽《汇编语言》 第11章 标志寄存器
-------------------------------------------------------------------------------------------------------------------------------------
9、
mul指令,如果是8位乘法,那么第一个乘数,默认在AL中,另一个放在8位寄存器或内存单元中,结果默认放在AX中。
如果是16位乘法,那么第一个乘数,默认在AX中,另一个放在16位寄存器或内存单元中,结果默认低8位在AX中,高8位在DX中。

这题要对CL乘以4,直接mul 4显然不对,CL是8位乘法,那么首先要把CL放到AL中,第二mul不能直接后面接数字,必须后面是8位寄存器或者内存单元,语法也错误。

个人觉得mul和移位指令的区别在于,结果的存储地方不同,移位是结果还在本身,mul的结果8位的在ax,16位的在dx和ax中。
还有就是移位感觉要注意溢出的问题。比如cl=1000 0000b。左移一位后,就有溢出问题。结果就不是乘2了。

参考资料:王爽《汇编语言》 P199  mul指令
-------------------------------------------------------------------------------------------------------------------------------------
16、
jc为无符号数条件转移指令,功能是 CF=1,也就是低于,转至标号处执行
jnc为无符号数条件转移指令,功能是CF=0,也就是不低于,转至标号处执行
jge为有符号数条件转移指令,功能为大于等于/不小于时转移
ja为无符号数条件转移指令,功能是cf=0且zf=0,也就是高于则转移

这题是无符号数,排除jge,题目要求AL≥BL。也就是al不低于bl,个人觉得选jnc。不知道答案为什么选jc。

参考资料:王爽《汇编语言》 P226 & 汇编金手指
-------------------------------------------------------------------------------------------------------------------------------------
18、
首先AL=0AH 也就是
            AL=00001010B (前面4个零别忘了哦,AL是8位寄存器的撒
NOT    AL=11110101B(很明显不是05H哇)
XOR    Al,0FH(XOR为异或指令,两个值不同为1,相同为0)
XOR运算演示:
            AL=00001010B
                   00001111B(也就是0FH)
XOR结果  =00000101B(结果为05H)
-------------------------------------------------------------------------------------------------------------------------------------
19、
首先DW是按字来存储。
DA1  DW‘AB’,‘CD’,‘EF’,‘GH’
编译器把他们翻译为 4142h,4344h,4546h,4748h
但是dw是按字来存储的,高位要放高字节,所以顺序为4241h 4443h 4645h 4847h
DA1+3=CS:[DA1+3]  偏移为DA1+3的内存存储的数据是4346h
MOV AX,DA1+3      但是存到寄存器里面也是要按高位放高字节的要求来存。所以ax=4643h (也就是FC)
送上DEBUG图:
19.png


再送一张把dw改成db的图:

192.png

评分

参与人数 1鱼币 +3 收起 理由
XBOY + 3 有图有真相,谢谢你辛苦了!!!感谢你的详.

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-15 17:17:09 | 显示全部楼层
写了一下午
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表