|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 laoqian 于 2012-12-20 22:22 编辑
本人编写的源代码如下:
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show
mov ax,4c00H
int 21H
show:push ax
push bx
push cx
push dx
push si
push di
mov di,0
mov ax,0B800H
mov es,ax
mov ax,0
add al,dl
add al,al
mov di,ax
mov al,160
mul dh
mov bx,ax
mov al,cl
change: mov cl,ds:[si]
mov ch,0
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
inc si
add di,2
jmp short change
ok:pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start 编译连接后,进入debug执行g命令,屏幕上不能按预期设想的内容显示。用t命令执行如下:
-t
W
AX=0502 BX=0506 CX=0057 DX=0803 SP=FFF2 BP=0000 SI=0000 DI=0000
DS=184A ES=B800 SS=184A CS=184C IP=0037 NV UP EI PL NZ NA PE NC
184C:0037 B500 MOV CH,00
-t
AX=0502 BX=0506 CX=0057 DX=0803 SP=FFF2 BP=0000 SI=0000 DI=0000
DS=184A ES=B800 SS=184A CS=184C IP=0039 NV UP EI PL NZ NA PE NC
184C:0039 E30D JCXZ 0048
-t
AX=0502 BX=0506 CX=0057 DX=0803 SP=FFF2 BP=0000 SI=0000 DI=0000
DS=184A ES=B800 SS=184A CS=184C IP=003B NV UP EI PL NZ NA PE NC
184C:003B 26 ES:
184C:003C 8809 MOV [BX+DI],CL ES:0506=43
-t
AX=0502 BX=0506 CX=0057 DX=0803 SP=FFF2 BP=0000 SI=0000 DI=0000
DS=184A ES=B800 SS=184A CS=184C IP=003E NV UP EI PL NZ NA PE NC
184C:003E 26 ES:
184C:003F 884101 MOV [BX+DI+01],AL ES:0507=07
-d B800:0506 050F
B800:0500 30 07-35 07 30 07 32 07 20 07 0.5.0.2. .
执行到这里发现问题,cx的内容为0057H(即cl=57H),执行指令move es: [BX+DI],CL后,用d命令查询B800:0506内存单元的内容并不是57H,而是30H。问题出在什么地方,求各位大牛指点迷津。
|
|