loop失效的问题

heqichen 2010-11-18 07:01:31
刚刚开始认真学汇编,在www.aogosoft.com下载了一份《Win32汇编语言入门》V0.1汇编教程,觉得不错,现在在看,但是遇到个问题。。。

有段程序,文档中的代码如下
.386
.model flat, stdcall
option casemap:none

include c:\masmplus\include\windows.inc
include c:\masmplus\include\kernel32.inc
includelib c:\masmplus\lib\kernel32.lib
include c:\masmplus\include\user32.inc
includelib c:\masmplus\lib\user32.lib

.data
MsgBoxCaption db "Result", 0
MsgBoxText db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

.code
start:
mov al, 97h
call ShowAL

invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_YESNOCANCEL
invoke ExitProcess, NULL

ShowAL proc
mov dl, al
mov cl, 04
shr al, cl
mov cx, 02h
xor ebx, ebx

mov esi, offset MsgBoxText

;mov cx, 1
Low4bit:
;invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_YESNOCANCEL

cmp al, 09
jbe larger
add al, 07h
larger:
add al, 30h
mov [esi], al
inc esi

mov al, dl
and al, 0fh

loop Low4bit
ret
ShowAL endp
end start

代码其实很简单,就是把97转成ascii能够在一个对话框中显示出来

但是发现一直死循环,也就是在Low4bit这个循环里面,初步来了,loop不起作用,
而我把loop Low4bit改成下面的代码
dec cx
cmp cx, 0
jne Low4bit

就能正常在一个对话框中显示97

在这个程序当中loop不起作用了,请问这个是什么情况?loop为什么失效?
...全文
243 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
heqichen 2010-11-18
  • 打赏
  • 举报
回复
果然是ecx的问题。。386已经是32位的了,脑子里还是想着8086的16位实地址模型,就没往ecx上面去考虑,谢谢啦
shzhfu 2010-11-18
  • 打赏
  • 举报
回复
386汇编不太熟。会不会是它的loop用ecx?若是,那你的ecx的高16位是否不为0呢?你把
mov cx, 02h
换成
mov ecx,2
试试。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧