Программа сборки - PullRequest
       5

Программа сборки

0 голосов
/ 11 ноября 2010

Я хочу создать программу на ассемблере, которая будет считывать строку с клавиатуры, затем преобразовывать каждую букву в другой таблице и затем сохранять ее в таблице по адресу [201].На [200] у меня есть счетчик символов моей строки.Вот что я сделал:

mov [0300h],88h        ;thats the table that I want to convert to.(only 3 digits)

mov [0301h],83h

mov [0302h],0CEh


mov ah,01h                     ;insert string 
int 81h                   


mov di,01h                 

start: 
mov al,[di]  
cmp al,00h          ;not
    sure about that. last char of string
    should be /0.

je end                  
mov [0200h],di    ;char counter.    
inc di

mov bx,0300h      
sub al,041h
    ;convert char 
xlat 
mov [di+01ffh],al
    ;store converted char to 201...

loop start 

end:

**int 81h**
;reads chars until <cr> from keyboard.Starting  address of input data buffer             ES:DI+1

По какой-то причине DI принимает значение 0900 в конце моей программы.Любая идея, почему это не работает, или любая идея, что я могу сделать это любым другим способом?Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2010

Это так не работает ... посмотрите на это как на пример (он считает, что fn 1 из int81 читает символ. Понятия не имеет о реальном интерфейсе):

some_table: db 88h, 83h, CEh
result:     db ??(128) // can't recall the syntax

push ds
pop  es
lea bx, some_table
lea di, result // for stosb to work

start: 
mov ah,01h                     ;//insert string 
int 81h                   
cmp al, 0Ah  // enter in linux (or it's 0Dh?)
je end                  
sub al, 'A' // what do you mean by "convert to char"? it's already a char. and what happens if it's larger than 'C'?
xlat 
stosb 
jmp start 
end:
0 голосов
/ 11 ноября 2010
mov al,[di]

Не следует ли добавить сюда смещение в свой входной буфер?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...