2013-05-04 4 views
2

то, что я хочу знать, очевидно, сказано на эту тему. У меня проблема с перемещением 8-битного регистра в 16-разрядный регистр. Я пытаюсь сделать это, делить число постоянно на 10, пока оно не станет ниже 10, и, в течение каждого времени разделения, я попытаюсь вытащить оставшуюся часть подразделения из регистра ah, добавьте 48 к этому, тогда я мог бы иметь его код Ascii, тогда я попытаюсь показать цифру, которую я получил, на экране. вот код:Сборка, переместить 8-битный регистр в 16-битный регистр, как?

Num1 DW 255 
DIVISION : 
     CMP NUM1,10 
      Jl DIVEND 

     MOV AX,10 
     DIV NUM1 
     MOV NUM1,AL ;* 


     ADD AH,48 
     MOV DL,AH; 
     MOV AH,02H 
     INT 21H 

    JMP DIVISION 

, но, когда им пытаются собрать его, он говорит, типы Операнд не совпадают по линии, обозначенной знаком *. im использование турбоассемблера V4.1 ... что мне делать?

+0

Не помню многого от Turbo Assembler, но вы попробовали «MOV BYTE NUM1, AL'? –

+1

Я не понимаю, что вы делаете MOV NUM1, AL перемещает содержимое AL в NUM1? это не может случиться, не так ли? –

+0

@PreetSangha Правильно, я пропустил это, просто глядя на синтаксис :) –

ответ

0

Вы имели в виду?

mov bx, Offset Num1 
mov [bx], al 

Ошибка, возникающая из-за того, что вы объявляете слово, но указываете его как байт. Если вы сделали Num1 db, он также работает.

Испытан с TASM 4.1

+0

спасибо, это сработало ... – user1547062

2

Что касается более общего вопроса в названии: вы используете movzx (перемещение нулевой степени) для значений без знака и movsx (перемещения знака расширения) для знаковых значений.

 Смежные вопросы

  • Нет связанных вопросов^_^