如何跟踪我的汇编语言程序?

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