汇编语言编程,大神进来看看这个程序怎么不对了?
显示器显示“input the number:”,从键盘输入的字符串,如果是“12345” 回车换行显示ok!(回车字符的ASCII码是0DH,换行的AXCII码是0AH);如果不是则显示not match!
data segment
string0 db 10,0,10 dup(?)
string1 db 'input the number:',0dh,0ah,'$'
string2 db 'not match!','$'
string3 db 'ok!','$'
string4 db '12345'
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
lea dx,string1
mov ah,09h
int 21h
lea dx,string0
mov ah,0ah
int 21h
lea si,string0+2
lea di,string4
mov cx,05h
cld
repe cmpsw
jz outp
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
lea dx,string2
mov ah,09h
int 21h
jmp endd
outp: mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
lea dx,string3
mov ah,09h
int 21h
endd: mov ah,4ch
int 21h
code ends
end start
补充:大神们,觉得要加分的,留下应该得到的分数,我会酌情加分的
答案:3个问题,已修改好!
data segment
string0 db 10,0,10 dup(?)
string1 db 'input the number:',0dh,0ah,'$'
string2 db 'not match!','$'
string3 db 'ok!','$'
string4 db '12345'
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
PUSH DS ;因为比较的两个字符串在同一个段中,所以必须使DS=ES
POP ES
lea dx,string1
mov ah,09h
int 21h
lea dx,string0
mov ah,0ah
int 21h
lea si,string0+2
lea di,string4
mov cx,0 ;;;;;;;;;;;
lea bx,string0+1 ;;;;;;;;;;;
mov cl,[bx] ;;;;;;;;;;;
cmp cl,5 ;;;;;;;;;;;
jne no_m ;输入的字符不是5个
cld
repe cmpsB ;是比较字符,不是比较字
jz outp
no_m:
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
lea dx,string2
mov ah,09h
int 21h
jmp endd
outp: mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
lea dx,string3
mov ah,09h
int 21h
endd: mov ah,4ch
int 21h
code ends
end start
上一个:汇编语言输入10个十进制有符号数,用冒泡法排序,下面这个程序只能在屏幕上显示拍好序的十个数,
下一个:汇编语言 子程序设计