emu 8086 保持符号不变
emu 8086 Keep symbols unchanged
这些代码将大写字母(“仅限字母”)转换为小写字母,将小写字母转换为大写字母。我的问题是我也想打印它们并保持不变,如果有的话(非语言符号和演员)。使用您在程序中看到的 cmp 和 ... 命令
data segment
; add your data here!
ar db "haP!y bi3Rthday$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
mov si,0
mov ah,01
int 21h
cmp al,"c"
je c
cmp al,"l"
je l
jmp exit
c:cmp ar[si],"$"
je exit
cmp ar[si],96
jl c2
sub ar[si],32
c2:inc si
jmp c
l: cmp ar[si],"$"
je exit
cmp ar[si],96
jg l2
add ar[si],32
l2:inc si
jmp l
exit:lea dx,ar
mov ah,09
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
您需要通过指定下限和上限来限制大写和小写字符的范围,而不仅仅是您当前代码使用的一个值 (96)。
大写字符 [A,Z] 在 [65,90]
小写字符 [a,z] 在 [97,122]
中
当然,好处是您实际上不需要在代码中写入这些数字。你可以只写相关的字符,汇编器会替你代入:
Up: cmp ar[si], "$"
je exit
cmp ar[si], "a"
jb Up1
cmp ar[si], "z"
ja Up1
sub ar[si], 32 ; Make uppercase
Up1:inc si
jmp Up
Lo: cmp ar[si], "$"
je exit
cmp ar[si], "A"
jb Lo1
cmp ar[si], "Z"
ja Lo1
add ar[si], 32 ; Make lowercase
Lo1:inc si
jmp Lo
这些代码将大写字母(“仅限字母”)转换为小写字母,将小写字母转换为大写字母。我的问题是我也想打印它们并保持不变,如果有的话(非语言符号和演员)。使用您在程序中看到的 cmp 和 ... 命令
data segment
; add your data here!
ar db "haP!y bi3Rthday$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
mov si,0
mov ah,01
int 21h
cmp al,"c"
je c
cmp al,"l"
je l
jmp exit
c:cmp ar[si],"$"
je exit
cmp ar[si],96
jl c2
sub ar[si],32
c2:inc si
jmp c
l: cmp ar[si],"$"
je exit
cmp ar[si],96
jg l2
add ar[si],32
l2:inc si
jmp l
exit:lea dx,ar
mov ah,09
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
您需要通过指定下限和上限来限制大写和小写字符的范围,而不仅仅是您当前代码使用的一个值 (96)。
大写字符 [A,Z] 在 [65,90]
小写字符 [a,z] 在 [97,122]
当然,好处是您实际上不需要在代码中写入这些数字。你可以只写相关的字符,汇编器会替你代入:
Up: cmp ar[si], "$"
je exit
cmp ar[si], "a"
jb Up1
cmp ar[si], "z"
ja Up1
sub ar[si], 32 ; Make uppercase
Up1:inc si
jmp Up
Lo: cmp ar[si], "$"
je exit
cmp ar[si], "A"
jb Lo1
cmp ar[si], "Z"
ja Lo1
add ar[si], 32 ; Make lowercase
Lo1:inc si
jmp Lo