程序必须使用循环显示从a
到z
(水平替换大写和小写)的字母。
示例输出:
AaBb . . . . . . . . . . . . YyZz
这是我到目前为止使用的代码,但它只输出大写字母。请帮我如何组合这些小写字母:(
谢谢:)
.model small
.code
.stack 100
org 100h
start :
mov ah, 02h
mov cl, 41h
skip :
mov dl, cl
Int 21h
inc cl
cmp cl, 5Ah
jnz skip
Int 27h
end start
答案 0 :(得分:1)
您必须添加20(十六进制)才能显示小写字母。 像这样:
start :
mov ah, 02h
mov cl, 41h
skip :
mov dl, cl
Int 21h
add dl, 20h
Int 21h
inc cl
cmp cl, 5Ah
jnz skip
Int 27h
end start
<强>更新强>
另一种方法:
start :
mov ah, 02h
mov cl, 41h
skip :
mov dl, cl
Int 21h
xor dl, 20h
Int 21h
inc cl
cmp cl, 5Ah
jnz skip
Int 27h
end start
答案 1 :(得分:1)
如果您希望它们穿插,则ASCII字符集在大写和小写字母之间的偏移量为20h
:
您可以从该表中看到,从A
移至a
需要添加20h
(从41h
转到61h
)这是所有其他字母也一样。
因此,您必须先:
,而不是简单地在循环结束时添加一个20h
。1fh
(即减去20h
,然后添加一个)。换句话说,改变:
mov dl, cl
int 21h
inc cl
成像:
mov dl, cl ; load dl with character and print.
int 21h
add cl, 20h ; move to lowercase variant and print.
mov dl, cl
int 21h
sub cl, 1fh ; move back to next uppercase variant.
如果您知道中断不会破坏您正在使用的dl
注册表,那么代码可以缩短(优秀的Ralf Brown interrupt list似乎表明这样,声明只更改了al
:
mov dl, cl ; load dl with character and print.
int 21h
add dl, 20h ; move dl to lowercase variant and print.
int 21h
inc cl ; move cl to next uppercase variant.