программирование на ассемблере sicxe - PullRequest
0 голосов
/ 12 августа 2011

ниже приведены коды ассемблера для машины sic / xe ....

     clear a
     ldx #128
loop jsub getc
     rmo a,s
     shift s,4
     jsub getc
     addr s,a
     stch 0,x
     tixr x,x
     j loop



getc td input 
    jeq getc
    rd input 
    comp #4     ;if input is 4 then eof
    jeq 80      ;jump to start of program
    comp #48    ; compare to charcter 0
    jlt getc    ;skip charcters less than 0
    sub #48     
    comp #10    ;if result is less than 10, conversion is complete
    jlt return 
    sub #7      ;for hex digits A through F
return rsub
input byte x'F1'

это загрузчик начальной загрузки ... цель этой программы - прочитать с устройства F1 и сохранитьвход по адресу, начинающемуся с 80 ... теперь мой вопрос в том, что когда нам нужно сделать сдвиг s, 4 ... когда мы берем один раз вход, мы находим его исходное значение из его значения ascii и затем отправляем его'loop', чтобы сохранить его ... из программы выясняется, что в цикл передается только первая половина байта chatacter, а затем другая ... если это так, то в первой будет первая половина байта charcter ипоэтому операции ascii в первой половине не дадут нам действительного значения ввода ... также, когда программа вернется к 'getc', чтобы получить другую половину байта, не будет прочитан другой символ в списке вместо этого ...следующая строка из этой же книги о помощи ...

each byte of the code to be loaded is on device F1 as two hexadecimal digits  

1 Ответ

0 голосов
/ 12 августа 2011

Этот код преобразует число, закодированное в строке ASCII, в значение байта.

Таким образом, учитывая строку 'A5', он будет хранить число 165 в байте в памяти.

Необходимо выполнить два чтения для каждого байтового значения.(Как вы можете видеть, в строке «A5» есть два символа: «A» и «5».

Процедура getc читает первый символ. В моем примере это «A»,который имеет значение ASCII 65 (41 шестнадцатеричный). Процедура вычитает 48, а затем снова 7. 65-48-7 = 10, что является десятичной записью шестнадцатеричной цифры A.

Цикл затемсдвигает это значение на 4 позиции, что приводит к значению 160 '. Это потому, что первый символ, который мы прочитали, был старшим байтом двухбайтовой строки.

В следующий раз, когда вызывается getc, он читаетсимвол '5', который имеет код 53. 53-48 равен 5.

Затем цикл добавляет 5 к ранее сохраненному значению 160, что дает правильное общее число 165.

Итак, этот фрагмент кода преобразует шестнадцатеричное число, закодированное в ascii, в значение байта. Вам нужно два символа, чтобы составить значение байта.

...