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

Assembly 使用程序集转换字母大小写时出现问题,assembly,dos,Assembly,Dos,我需要帮助在MS-DOS中创建一个汇编程序,该程序将输出如下内容: AbCdEfGhIjKl 也垂直 我能做的最接近的东西是 AbCbEbGbH 我不知道如何增加中间的东西 这不是特定于汇编,而是特定于ASCII代码。 小字符的代码比相应大写字符的代码高32(20十六进制)。你可以反复浏览ABC。。。每秒钟增加32个字符。或者您使用两个变量(或寄存器,因为您使用汇编),一个以“A”开头,另一个以“b”开头,在这些变量之间保持切换并始终将它们递增2。您可以利用以下事实:在ASCII编码中,大写

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

AbCdEfGhIjKl
也垂直

我能做的最接近的东西是

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


这不是特定于汇编,而是特定于ASCII代码。
小字符的代码比相应大写字符的代码高32(20十六进制)。你可以反复浏览ABC。。。每秒钟增加32个字符。或者您使用两个变量(或寄存器,因为您使用汇编),一个以“A”开头,另一个以“b”开头,在这些变量之间保持切换并始终将它们递增2。

您可以利用以下事实:在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

“我能做的最接近的事情是AbCbEbGbH”我们无法知道你做错了什么,因为你没有发布你的代码。哦,对了,很抱歉编辑你的问题并将代码添加为文本(使用ctrl+k格式化)。转到
chcp
以了解你使用的字符集和字符编码。几乎所有的字母大小写之间都没有转换规则。例如,在中,ñ和ñ的偏移量为1,而字母的偏移量为32(几乎在所有字符集中都是如此)。
xor dl,20
在每次迭代结束时都可以轻松地在大写字母和普通字母之间来回切换。或者展开并
添加dl,1+0x20
添加dl,1-0x20