Вопрос № 142441: Здравствуйте, Уважаемые Эксперты!!! Нужна Ваша помощь. Пытаюсь решить вот такую задачку: «Написать программу преобразования в двоичную форму упакованного четырехразрядного двоично-десятичного числа (введенного с клавиатуры) и вывода результата прео...
Вопрос № 142.441
Здравствуйте, Уважаемые Эксперты!!! Нужна Ваша помощь. Пытаюсь решить вот такую задачку: «Написать программу преобразования в двоичную форму упакованного четырехразрядного двоично-десятичного числа (введенного с клавиатуры) и вывода результата преобразования на экран в двоичном виде». Я тут пыталась что-то сотворить, но почему-то в отладчике вроде все получается и программа выдает верный результат, а просто при запуске программы на экране появляется огромное кол-во 0 и 1. В общем, скажите, ПОЖАЛУЙСТА, правильно
ли я решаю эту задачу? А если можно как-то более грамотно ее решить, то покажите, ПОЖАЛУЙСТА, как.
Отвечает: Airyashov
В отладчике все хорошо потому что от обнуляет si, в общем ваша программа работает правильно.
.model tiny .code org 100h ;
begin: mov ah,0ah mov dx,offset buffer int 21h ;====================== inc dx mov di,dx mov bl,[di] ; bl - ДЛИНА-кол-во введенных символов mov [di],ah ; dlina=ah ????? эта строка непонятна зачем? xor bh,bh ; bh:=0 inc di ; di:=di+1, теперь di содержит адрес начала строки text ;=====================
xor ax,ax
m: mov ax,[di] and ax,000fh ; Очистить зону тройки? какой тройки? выделить цифру из первого символа, если введена цифра (символ)!!!
;=============================== mov bx,2 ; количество введенных символов потеряли!!! xor cx,cx ; Количество цифр???? cx=0 ; isDiv: xor dx,dx div bx ; push dx ; inc cx or ax,ax ; в цифре 4 бита всегда возможно нули
тоже нужно будет вывести? jnz isDiv
isOut: pop ax ; Восстанавливаем цифру or ax,30h ; Переводим её в символ int 29h ; Выводим loop isOut inc di inc si ; какое начальное занчение si было до этого кода? cmp si,4; почему именно 4? jne m mov ah,10h int 16h ;*********************************************************************** int 20h ;====================== buffer db 5 ; не правильно определен буфер требуется
+1 байт для символа конца строки -> 5,0(сколько реально ввели символов),5 dup () text db 5 dup () ; end begin
Ответ отправил: Airyashov (статус: 7-ой класс)
Ответ отправлен: 28.08.2008, 08:32 Оценка за ответ: 5