使用程序集转换字母大小写时出现问题

时间:2018-10-05 11:27:50

标签: assembly dos

我需要在MS-DOS中创建一个汇编程序的帮助,该程序将输出如下内容:

AbCdEfGhIjKl

也垂直

我能做的最接近的事情是

AbCbEbGbH

我不知道如何增加中间的东西

Image of code

2 个答案:

答案 0 :(得分:1)

您可以利用以下事实:在ASCII编码中,大写字母从0x41开始,而普通字母从0x61开始。也就是说,大写字母和相应的普通字母之间始终存在0x20的差异。

这是一个使用NASM语法的DOS简单示例:

[org 0x100]
mov dl,'A'
mov cx,26      ; the whole (english) alphabet
again:
  mov ah,2
  int 0x21
  inc dl       ; next letter
  xor dl,0x20  ; switch from capitals->commons, or vice versa
  loop again

mov ax,0x4c00
int 0x21

答案 1 :(得分:0)

这不特定于汇编,而是特定于ASCII代码。 小写字母的代码比相应大写字母的代码高32(十六进制)。您可以遍历ABC ...,然后在每个第二个字符中添加32。或者,您使用两个变量(或由于使用汇编而使用寄存器),一个以“ A”开头,另一个以“ b”开头,在这些变量之间进行切换,并始终将其递增2。