如何跟踪汇编语言程序?

时间:2015-09-18 11:01:33

标签: assembly x86 character

我有这段代码,它检查输入是数字还是大写或小写字符。但是,如果我给它以外的任何东西而不是字母作为输入应该是"非字母。"

我怎样才能做到这一点?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您向我们展示的代码甚至无法正确区分字母和其他字符!
你应该肯定做一些的减法结果 您还应该更改条件跳转,因为现在您已经排除了'Z'字符。

这是您需要区分大写字母和其他所有字母的代码:

sub rply+2, 'A'
jb  notok
cmp rply+2,'Z'-'A'
ja  notok