注册 登录
编程论坛 汇编论坛

帮我改一段程序

toyix 发布于 2008-07-14 14:48, 1200 次点击
.386
.model flat,stdcall
option casemap:none
include \masmplus\include\windows.inc
include \masmplus\include\kernel32.inc
includelib \masmplus\lib\kernel32.lib
include \masmplus\include\user32.inc
includelib \masmplus\lib\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
显示AL中的数值,但是程序在运行期会出现错误
3 回复
#2
ONEPROBLEM2008-07-14 15:11
.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
;===========================================
这是我的修改,我不用它的循环了,自己搞了一个:
.while   x<n
    ;do something
    inc  x
.endw

[[it] 本帖最后由 ONEPROBLEM 于 2008-7-14 15:16 编辑 [/it]]
#3
magicroller2008-07-19 14:55
不用中断调用就可以  显示数据在屏幕上吗?
#4
toyix2008-07-25 20:44
程序只要对了就行 了
1