Проблема с использованием сборки для преобразования букв в регистр - PullRequest
0 голосов
/ 05 октября 2018

Мне нужна помощь в создании программы сборки в MS-DOS, которая будет выводить что-то вроде этого:

AbCdEfGhIjKl

также по вертикали

Самое близкое, что я могу сделать, это что-то вроде

AbCbEbGbH

Я не знаю, как увеличить промежуточный материал

Image of code

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете воспользоваться тем, что в кодировке ASCII заглавные буквы начинаются с 0x41, а обычные буквы начинаются с 0x61.Таким образом, всегда есть разница в 0x20 между заглавной и соответствующей обычной буквой.

Вот простой пример для DOS в синтаксисе NASM:

[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
0 голосов
/ 05 октября 2018

Это относится не только к сборке, но и к коду ASCII.Код маленького символа на 32 (20 гекс) выше, чем у соответствующего заглавного символа.Вы можете перебирать ABC ... и добавлять 32 к каждому второму символу.Или вы используете две переменные (или регистры, так как вы используете сборку), начинаете одну с «A», а другую с «b», продолжайте переключаться между этими переменными и всегда увеличивайте их на 2.

...