无法将大写转换为小写,反之亦然用户输入字符串

问题描述 投票:0回答:1

我正在尝试在 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:$"
assembly uppercase lowercase emu8086
1个回答
0
投票
  1. mov si, offset buffer
    错了。文本从
    buffer+2
    开始。
  2. cmp al, 0
    错了。您的
    buffer
    未初始化为零,无论如何您都应该使用返回的字节数。
  3. 您的代码永远不会将大写字母转换为小写字母,因为
    ; Uppercase to lowercase
    块无法访问。
  4. next_bit
    是用词不当。您的意思可能是
    next_byte
  5. lea dx, si
    错了。您已经增加了
    si
    以指向字符串后面。您应该使用
    dx
    重新加载
    buffer+2
  6. 文本不是以
    $
    结尾,因此 int21/09 无法按原样打印它。
  7. jmp check
    没有错:)但是跳到下一行肯定是没用的。
© www.soinside.com 2019 - 2024. All rights reserved.