Я использую отладчик DOSBox в качестве среды для изучения того, как процессор на базе x86 / 64 пересекает машинный код.
В качестве справочного материала я использую пример «Вывод с ограничением длины в DOS2», который я нашел по адресу:
https://montcs.bloomu.edu/~bobmon/Information/LowLevel/Assembly/hello-asm.html
Я пробовал несколько разных подходов, но именно это дало результаты, наиболее близкие к тому, что я ищу.
Я использую шестнадцатеричный редактор для ввода байтов вручную, и вот шестнадцатеричный код, который я сейчас сохранил в файле с именем "executetable.com":
68 DD 01 1F B2 00 B6 00 B1 06 B3 01 B4 40 B0 00
CD 21 B4 4C B0 00 CD 21 48 65 6C 6C 6F 21 0A D0
0A 24 20
Выполнение этого файла через отладчик дает следующий обзор кода:
01DD:0100 68DD01 push 01DD
01DD:0103 1F pop ds
01DD:0104 B200 mov dl,00
01DD:0106 B600 mov dh,00
01DD:0108 B106 mov cl,06
01DD:010A B301 mov bl,01
01DD:010C B440 mov ah,40
01DD:010E B000 mov al,00
01DD:0110 CD21 int 21
01DD:0112 B44C mov ah,4C
01DD:0114 B000 mov al,00
01DD:0116 CD21 int 21
Это несколько похоже на код в ссылке (который я, конечно, тоже пробовал) и выдает строку длины 6, как и ожидалось.
Тем не менее, строка не извлекается из того места, где я хочу, и поэтому вывод - просто беспорядок символов, в отличие от «Hello!» который присутствует в шестнадцатеричном коде.
Есть мысли о том, что происходит?