我正在尝试在 emu8086 上编写一个汇编程序,将用户输入的字符串从大写转换为小写,反之亦然,但它不会更改字符串的任何字符:
lea dx, prompt
mov ah, 9
int 21h
; Read the input
mov ah, 0ah
int 21h
mov si, offset buffer
start:
mov al, [si]
cmp al, 0
je show
; Lowercase to uppercase
cmp al, 'a'
jl next_bit
cmp al, 'z'
jg next_bit
sub al, 32
jmp check
; Uppercase to lowercase
cmp al, 'A'
jl next_bit
cmp al, 'Z'
jg next_bit
add al, 32
jmp check
check:
mov [si], al
jmp next_bit
;incrementing si register to get the next character
next_bit:
inc si
jmp start
;display result
show:
lea dx, si
mov ah, 9
int 21h
jmp end
end:
mov ah, 4ch
int 21h
buffer db 10,?, 10 dup(' ')
prompt db "String:$"
mov si, offset buffer
错了。文本从 buffer+2
开始。cmp al, 0
错了。您的 buffer
未初始化为零,无论如何您都应该使用返回的字节数。; Uppercase to lowercase
块无法访问。next_bit
是用词不当。您的意思可能是next_byte
。lea dx, si
错了。您已经增加了 si
以指向字符串后面。您应该使用 dx
重新加载 buffer+2
。$
结尾,因此 int21/09 无法按原样打印它。jmp check
没有错:)但是跳到下一行肯定是没用的。