![]() |
#2
xiaomarn2010-10-23 15:43
|

;MASMPlus 代码模板 - 纯 DOS 程序
.model small
.stack 200h
.data
szMsg db 'Hello World!',13,10,'$'
string db 25
result dw 4 dup(?)
LastLine db 0dh,0ah,'$'
.CODE
START:
mov ax,@data
mov ds,ax
;第一部分
;输入字符串
lea dx, string
mov ah,0ah
int 21h
;换行
mov dl,0ah
mov ah,02h
int 21h
mov si,offset string
inc si
;取string的第二个字符
mov cl,[si]
;cx放string字符个数
and cx,0ffh;取低八位
;输出字符串
jumpout:
inc si
mov dl,[si]
mov ah,02h
int 21h
loop jumpout
;回车换行
lea dx,LastLine
mov ah,09h
int 21h
;call display
xor dx,dx
xor ax,ax
;第二部分
mov ax,100
mov dx,result
call display
;暂停,任意键关闭
mov ah,1
int 21h
mov ah,4ch ;结束,可以修改al设置返回码
int 21h
display proc near
xor cx,cx
mov bx,10
jump:
div bx
push dx
xor dx,dx;记得要清零
inc cx
cmp ax,0
jnz jump
myLoop:
pop dx
add dl,30h
mov ah,02h
int 21h
loop myLoop
ret
display endp
END START
以上是我写的汇编代码,出现的问题是,.model small
.stack 200h
.data
szMsg db 'Hello World!',13,10,'$'
string db 25
result dw 4 dup(?)
LastLine db 0dh,0ah,'$'
.CODE
START:
mov ax,@data
mov ds,ax
;第一部分
;输入字符串
lea dx, string
mov ah,0ah
int 21h
;换行
mov dl,0ah
mov ah,02h
int 21h
mov si,offset string
inc si
;取string的第二个字符
mov cl,[si]
;cx放string字符个数
and cx,0ffh;取低八位
;输出字符串
jumpout:
inc si
mov dl,[si]
mov ah,02h
int 21h
loop jumpout
;回车换行
lea dx,LastLine
mov ah,09h
int 21h
;call display
xor dx,dx
xor ax,ax
;第二部分
mov ax,100
mov dx,result
call display
;暂停,任意键关闭
mov ah,1
int 21h
mov ah,4ch ;结束,可以修改al设置返回码
int 21h
display proc near
xor cx,cx
mov bx,10
jump:
div bx
push dx
xor dx,dx;记得要清零
inc cx
cmp ax,0
jnz jump
myLoop:
pop dx
add dl,30h
mov ah,02h
int 21h
loop myLoop
ret
display endp
END START
如果单独运行第一部分与第二部分程序都没有问题。
但是把这两部分放在一起的时候程序就是一闪而过。
用mov ah,01h输入来暂停也没有用。有人可以帮我找出问题吗?谢谢!