-64- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
0A53:0036 0A53:0038 0A53:003A 0A53:003C 0A53:003E 0A53:0040 0A53:0042 0A53:0044 0A53:0046 0A53:0047 0A53:004C 0A53:004E 0A53:0050 |
8BD8 B400 CD1A 3BDA 75F8 E461 24FC E661 5B 80BF1200FF 75BE B44C CD21 |
MOV MOV INT CMP JNZ IN AND OUT POP CMP JNZ MOV INT |
BX,AX AH,00 1A BX,DX 0038 AL,61 AL,FC 61,AL BX BYTE PTR [BX+0012],FF 000C AH,4C 21 |
||||||||||||||||||
-da4e:0 0A4E:0000 0A4E:0010 0A4E:0020 0A4E:0030 0A4E:0040 |
00 00 C8 11 BD 0F 21 0E-57 0D E2 0B 96 0A 6F 09 E7 08 03 02 01 02 03 03-03 02 02 02 03 05 05 03 02 01 02 03 03 03 03 02-02 03 02 01 FF 04 04 04 04 04 04 08 04 04 08 04-04 08 04 04 04 04 04 04 04 04 04 04 04 04 08 00-00 00 00 00 00 00 00 00 |
......!.W.....o. ................ ................ ................ ................ |
|||||||||||||||||||
仔细阅读反汇编出来的程序,可以看到CMP指令的反汇编结果和源程序有很大的不同:其一,源程序中并没有"BYTE PTR",这样的文字;其二,"-1"居然成了"FF",难道"-1=255"吗? 在回答这两个问题之前,我们先将下面给出的程序编译成COM文件: |
|||||||||||||||||||||
TEMP.ASM code main msg crlf start: |
segment assume org proc jmp db dw mov mov int mov mov int mov int int |
cs:code 100h far short start 'Hello,World!',24h 0d0ah ah,9 dx,offset msg 21h ah,2 dl,crlf 21h dl,crlf+1 21h 20h |
;跳过数据区 ;定义一个字符串 ;定义回车、换行符 ;选择DOS API的09H功能 ;设置DX寄存器指向字符串首地址 ;显示字符串 ;选择DOS API的02H功能 ;取得ASCII码0AH ;显示换行符 ;取得ASCII码0DH ;显示回车符 ;结束程序 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |