找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 52|回复: 0

6.13--原书第6章习题的答案与答疑

[复制链接]

709

主题

357

回帖

1331

积分

管理员

积分
1331
发表于 2026-5-6 11:26:23 | 显示全部楼层 |阅读模式
第6章习题


1.试找出以下程序片断中隐藏的问题并进行修正:
   mov ax,21015
   mov bl,10
   div bl
   and cl,0xf0
答:代码中是8位除法,AL保存商。但问题在于21015除以10的商太大,用AL保存不下。所以需要做16位除法。建议的修改为:
   mov ax,21015
   mov bx,10
   div bx
   and cl,0xf0

2.本章的程序在内存中的加载地址是0x0000:0x7C00,此时,指令jmp near infi在段内的偏移地址是多少?试修改本章的源程序以显示该值。
答:从表6-3可知,这条jmp指令的汇编地址是0x12B,所以程序加载后,实际的段内偏移是0x7C00加上0x12B,结果就是0x7D2B。
      要显示该值,需要将指令
      mov ax,number
      修改为
      mov ax,0x7C00 + infi

3.汇编语言编译器采用助记符来方便指令的书写和阅读,而且在内存里,机器指令以数字的形式存在。比如,mov是传送指令,div是除法指令。假如Intel公司新推出一款处理器,该处理器新增了一条指令,其机器码为两个字节的0xCD 0x88。因为是新指令,你的NASM编译器肯定没有一个助记符与之相对应。在这种情况下,如何在你的程序中使用该指令?
答:汇编语言程序编译后的结果是数字,是机器码。既然如此,可以直接在需要这条新指令的位置用伪指令DB来插入它的机器码,比如
      ...
      DB 0xcd, 0x88
      ...



对以上答案有疑问,或者有其它想法和建议的,请在下面提出。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2026-5-14 08:19 , Processed in 0.409010 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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