|
|
第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
...
|
|