一旦输入空格字符,就很难让我的输入打印出来。到目前为止,我让它显示输入的大写/小写,但是一旦我输入一个字符串,它就不会读取空格字符之后的内容。有什么建议吗?
编辑:使用EMU8086的英特尔x86处理器和即时通讯
org 100h
include 'emu8086.inc'
printn "Enter string to convert"
mov dx,20
call get_string
printn
mov bx,di
mov ah,0eh
mov al,[ds+bx]
cmp al, 41h
cmp al, 5Ah
jle ToLower1
cmp al, 61h
cmp al, 7ah
jle ToUpper1
ToLower1:
add al, 20h
int 10h
jmp stop1
ToUpper1:
sub al, 20h
int 10h
stop1:
inc bx
mov al,[ds+bx]
cmp al, 41h
cmp al, 5Ah
jle ToLower2
cmp al, 61h
cmp al, 7ah
jle ToUpper2
ToLower2:
add al, 20h
int 10h
jmp stop2
ToUpper2:
sub al, 20h
int 10h
stop2:
inc bx
mov al,[ds+bx]
cmp al, 41h
cmp al, 5Ah
jle ToLower3
cmp al, 61h
cmp al, 7ah
jle ToUpper3
ToLower3:
add al, 20h
int 10h
jmp stop3
ToUpper3:
sub al, 20h
int 10h
stop3:
inc bx
mov al,[ds+bx]
cmp al, 41h
cmp al, 5Ah
jle ToLower4
cmp al, 61h
cmp al, 7ah
jle ToUpper4
ToLower4:
add al, 20h
int 10h
jmp stop4
ToUpper4:
sub al, 20h
int 10h
stop4:
inc bx
mov al,[ds+bx]
cmp al, 41h
cmp al, 5Ah
jle ToLower5
cmp al, 61h
cmp al, 7ah
jle ToUpper5
ToLower5:
add al, 20h
int 10h
jmp stop5
ToUpper5:
sub al, 20h
int 10h
stop5:
printn
hlt
define_get_string
define_print_string
end发布于 2012-12-03 06:02:35
@Oded,这些寄存器是x86,而emu8086意味着8086CPU的仿真器。
@OP:好吧,你在一个字符代码上加了32,使其位于右下角?space的ASCII码是32,@符号的ASCII码是64,对吗?这应该会告诉你,你的比较是错误的。
cmp al, 41h ;A
; WHAT ARE YOU MISSING HERE?
cmp al, 5Ah ;Z
jle ToLower1
cmp al, 61h ;a
; WHAT ARE YOU MISSING HERE?
cmp al, 7ah ;z
jle ToUpper1您看到错误了吗?这基本上是告诉CPU,如果当前字符等于或小于Z,则使其更低。另外,如果字符等于或小于z,则将其设为大写。
所以你所拥有的是:
在cmp al, 41H之后需要一个条件跳转,在cmp al, 61H之后需要一个条件跳转
但这仍然不会起作用,这应该会起作用:
cmp al, 41H
jb CheckForLower
cmp al, 5AH
ja CheckForLower
; convert to lowercase here
; Process next char
cmp al, 61H
jb NotValid
cmp al, 7AH
ja NotValid
; convert to uppercase here
; Process next char*编辑*我们可以将所有代码压缩到一个循环中:
org 100h
include 'emu8086.inc'
printn "Enter string to convert"
mov dx,20
call get_string
printn
mov bx, di
mov ah,0eh
jmp Start
NextChar:
inc bx
Start:
mov al, [ds+bx]
test al, al
jz stop5
cmp al, 20H
je PrintChar
cmp al, 41H
jb CheckLower
cmp al, 5AH
ja CheckLower
add al, 20H
int 10H
jmp NextChar
CheckLower:
cmp al, 61H
jb NextChar
cmp al, 7AH
ja NextChar
sub al, 20H
PrintChar:
int 10H
jmp NextChar
stop5:
printn
hlt
define_get_string
define_print_string
endhttps://stackoverflow.com/questions/13673727
复制相似问题