曾经有一个程序,横在我的面前,我没有办法搞定它,它就是:来自 http://www.aogosoft.com/“汇编通讯”第一期里的一个程序。无论怎么弄,总是说“应用程序错误”,用WIN32DASM也查不出问题所在。
;在消息框里显示AL中的数值
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
.data
MsgBoxCaption db "结果!",0
MsgBoxText db 0,0,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 ;保存AL
mov cl,04
shr al,cl ;AL高4位移至低4位
mov cx,02h ;循环2次
xor ebx,ebx
mov esi,offset MsgBoxText
Low4bit:
cmp al,09
jbe larger ;低4位超过9
add al,07
larger:
add al,30h
mov [esi],al
inc esi
mov al,dl ;恢复保存
and al,0Fh
loop Low4bit
ret
ShowAL endp
end start
就是它,把我搞得焦头烂额的,现在终于被我给运行了起来,当然,改得菜菜的,呵呵~~:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
.data
MsgBoxCaption db "结果!",0
MsgBoxText db 0,0,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 ;保存AL
mov cl,04
shr al,cl ;AL高4位移至低4位
xor ebx,ebx
mov esi,offset MsgBoxText
.while ebx < 2
add al,30h
mov [esi+ebx],al
inc ebx
mov al,dl
and al,0fh
.endw
ret
ShowAL endp
end start