首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

一段复制自身的程序解决办法

2012-03-18 
一段复制自身的程序我看到一段复制自身到20h:0的程序,但最后两条指令没有正确复制。源代码如下:Assembly co

一段复制自身的程序
我看到一段复制自身到20h:0的程序,但最后两条指令没有正确复制。
源代码如下:

Assembly code
assume cs:Test Test segment         mov ax,cs         mov ds,ax         mov ax,20h         mov es,ax         mov bx,0         mov cx,cx       s:mov al,ds:[bx]         mov es:[bx],al         inc bx         loop s         mov ax,4c00h         int 21h Test ends end

debug的结果如下:
-r
AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B85 ES=0B85 SS=0B95 CS=0B95 IP=0000 NV UP EI PL NZ NA PO NC
0B95:0000 8CC8 MOV AX,CS
-u
0B95:0000 8CC8 MOV AX,CS
0B95:0002 8ED8 MOV DS,AX
0B95:0004 B82000 MOV AX,0020
0B95:0007 8EC0 MOV ES,AX
0B95:0009 BB0000 MOV BX,0000
0B95:000C 8BC9 MOV CX,CX
0B95:000E 8A07 MOV AL,[BX]
0B95:0010 26 ES:
0B95:0011 8807 MOV [BX],AL
0B95:0013 43 INC BX
0B95:0014 E2F8 LOOP 000E
0B95:0016 B8004C MOV AX,4C00
0B95:0019 CD21 INT 21
0B95:001B C3 RET
0B95:001C F9 STC
0B95:001D C3 RET
-g 0b95:16

AX=0021 BX=001B CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B95 ES=0020 SS=0B95 CS=0B95 IP=0016 NV UP EI PL NZ NA PE NC
0B95:0016 B8004C MOV AX,4C00
-u 20:0
0020:0000 8CC8 MOV AX,CS
0020:0002 8ED8 MOV DS,AX
0020:0004 B82000 MOV AX,0020
0020:0007 8EC0 MOV ES,AX
0020:0009 BB0000 MOV BX,0000
0020:000C 8BC9 MOV CX,CX
0020:000E 8A07 MOV AL,[BX]
0020:0010 26 ES:
0020:0011 8807 MOV [BX],AL
0020:0013 43 INC BX
0020:0014 E2F8 LOOP 000E
0020:0016 CC INT 3
0020:0017 004CCD ADD [SI-33],CL
0020:001A 2100 AND [BX+SI],AX
0020:001C 0000 ADD [BX+SI],AL

可见,源程序最后两条指令是
Assembly code
mov ax,4c00h         int 21h

而执行了复制之后,却变成了
Assembly code
INT     3

请问这是为什么?


[解决办法]
单步trace,注意最后2条的状况。
[解决办法]
探讨
我用的编译器是masm 5.0,然后用debug在dos下面调试,可以单步执行,但不方便实时的查看目标地址里面值的变化。请问有没有现代一点的汇编语言编译器,要支持16位汇编的?

热点排行