如何跟踪我的汇编语言程序?
How to trace my assembly language program?
我有这段代码,它检查输入的是数字还是大写或小写字符。但是,如果我给它除了字母以外的任何东西,作为输入应该是 "non letter."
我怎样才能做到这一点?
title
.model small
.stack 0100h
.data
entr db "Enter a number : ",'$'
ok db "Nice ",'$'
no db "not a number it is in lowercase case ",'$'
no2 db "not a number it is in Uppercase case ",'$'
.code
mov ax, @data
mov ds, ax
MOV AX, 0003h
int 10H
mov ah,09h
lea dx,entr
int 21h
mov ah,01
int 21h
mov bl,al
sub bl,'1'
cmp bl,'9'-'1'
jbe number
sub bl,'A'
cmp bl,'Z'-'A'
jae to
sub bl,'a'
cmp bl,'z'-'a'
jae to3
number:
mov ah,09h
mov dx,offset ok
int 21h
jmp @exit
to:
mov ah,09h
mov dx,offset no
int 21h
jmp @exit
to2:
mov ah,09h
mov dx,offset no2
int 21h
jmp @exit
to3:
mov ah,09h
mov dx,offset no2
int 21h
jmp @exit
@exit:
mov ax, 4c00h
int 21h
end
您向我们展示的代码甚至无法正确区分字母和其他字符!
你当然应该对减法的结果做点什么。
您还应该更改条件跳转,因为现在您已经排除了 'Z' 字符。
这是您需要区分大写字母和所有其他字母的代码:
sub rply+2, 'A'
jb notok
cmp rply+2,'Z'-'A'
ja notok
不对 sub
的结果做任何事情依赖于字节环绕,并且只有在通过 jbe
和朋友使用无符号逻辑时才能工作。
这是您可以编写的最简单的代码,用于区分大小写字母和所有其他字母:
sub al, 'A'
cmp al, 'Z'-'A'
jbe Letter ;It's uppercase
sub al, 'a'-'A'
cmp al, 'z'-'a'
jbe Letter ;It's lowercase
NonLetter:
...
Letter:
...
请注意,您的第二次减法不能使用 'a' (=97),因为第一次减法已经减去 'A' (=65)。因此这里只需要互补值。 97 - 65 = 32
我有这段代码,它检查输入的是数字还是大写或小写字符。但是,如果我给它除了字母以外的任何东西,作为输入应该是 "non letter."
我怎样才能做到这一点?
title
.model small
.stack 0100h
.data
entr db "Enter a number : ",'$'
ok db "Nice ",'$'
no db "not a number it is in lowercase case ",'$'
no2 db "not a number it is in Uppercase case ",'$'
.code
mov ax, @data
mov ds, ax
MOV AX, 0003h
int 10H
mov ah,09h
lea dx,entr
int 21h
mov ah,01
int 21h
mov bl,al
sub bl,'1'
cmp bl,'9'-'1'
jbe number
sub bl,'A'
cmp bl,'Z'-'A'
jae to
sub bl,'a'
cmp bl,'z'-'a'
jae to3
number:
mov ah,09h
mov dx,offset ok
int 21h
jmp @exit
to:
mov ah,09h
mov dx,offset no
int 21h
jmp @exit
to2:
mov ah,09h
mov dx,offset no2
int 21h
jmp @exit
to3:
mov ah,09h
mov dx,offset no2
int 21h
jmp @exit
@exit:
mov ax, 4c00h
int 21h
end
您向我们展示的代码甚至无法正确区分字母和其他字符!
你当然应该对减法的结果做点什么。
您还应该更改条件跳转,因为现在您已经排除了 'Z' 字符。
这是您需要区分大写字母和所有其他字母的代码:
sub rply+2, 'A'
jb notok
cmp rply+2,'Z'-'A'
ja notok
不对 sub
的结果做任何事情依赖于字节环绕,并且只有在通过 jbe
和朋友使用无符号逻辑时才能工作。
这是您可以编写的最简单的代码,用于区分大小写字母和所有其他字母:
sub al, 'A'
cmp al, 'Z'-'A'
jbe Letter ;It's uppercase
sub al, 'a'-'A'
cmp al, 'z'-'a'
jbe Letter ;It's lowercase
NonLetter:
...
Letter:
...
请注意,您的第二次减法不能使用 'a' (=97),因为第一次减法已经减去 'A' (=65)。因此这里只需要互补值。 97 - 65 = 32