Консультация № 200696
22.04.2021, 09:58
0.00 руб.
0 1 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:Разработать на ассемблере и отладить программу, которая выполняет:
1) ввод с клавиатуры двух 4-значных шестнадцатеричных чисел (для ввода с клавиатуры можно использовать любые чис-ла), которые записываются в качестве содержимого регистров BP и DI;
2) вывод на экран содержимого регистров, заполненных на шаге 1, в виде шестнадцатеричных чисел;
3) вывод на экран содержимого регистров, заполненных на шаге 1, в виде десятичных чисел;
4) вывод на экран содержимого регистров, заполненных на шаге 1, в виде двоичных чисел.
Пример информации на экране:
ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА BP AD56<Enter>
ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА DI 7F09<Enter>
ЧИСЛА В ШЕСТНАДЦАТЕРИЧНОЙ СИСТЕМЕ
(BP) = AD56 (DI) = 7F09
ЧИСЛА В ДЕСЯТИЧНОЙ СИСТЕМЕ
(BP) = 44374 (DI) = 32521
ЧИСЛА В ДВОИЧНОЙ СИСТЕМЕ
(BP) = 1010110101010110 (DI) = 0111111100001001

Обсуждение

давно
Старший Модератор
31795
6196
28.04.2021, 11:42
общий
это ответ
Дорого времени суток!

Т.к. задание "придумано" не корректно использован компилятор Tasm
Смотрите код:
[code lang=asm h=400]model tiny,pascal
locals @@
.code
org 100h
begin: push bp
@@00: call OutStr,offset dbInp
call OutStr,offset dbBp
call InpNum,16
jc @@00
mov bp,ax
@@01: call OutStr,offset dbInp
call OutStr,offset dbDi
call InpNum,16
jc @@01
mov di,ax
call OutStr,offset dbHex
call OutStr,offset dbOut
call OutNum,bp,16,4
call OutStr,offset dbDi
call OutNum,di,16,4

call OutStr,offset dbDec
call OutStr,offset dbOut
call OutNum,bp,10,5
call OutStr,offset dbDi
call OutNum,di,10,5

call OutStr,offset dbBin
call OutStr,offset dbOut
call OutNum,bp,2,16
call OutStr,offset dbDi
call OutNum,di,2,16
pop bp
ret
OutStr proc a:word
uses ax,dx
mov ah,9
mov dx,a
int 21h
ret
OutStr endp
OutNum proc a:word,b:word,c:word
uses ax,bx,cx,dx
mov ax,a
mov bx,b
xor cx,cx
@@01: xor dx,dx
div bx
cmp dl,10
jb @@02
add dl,7
@@02: add dl,'0'
push dx
inc cx
or ax,ax
jnz @@01
@@03: cmp cx,c
je @@04
mov al,'0'
push ax
inc cx
jmp @@03
@@04: pop ax
int 29h
loop @@04
ret
OutNum endp
InpNum proc a:word
uses bx,cx,dx
mov bx,a
xor cx,cx
@@01: xor ax,ax
int 16h
cmp al,13
mov ah,al
jz @@04
cmp al,'0'
jb @@01
cmp al,'9'
jbe @@02
and ah,0DFh
sub ah,7
@@02: sub ah,'0'
cmp bl,ah
jbe @@01
push cx
push ax
int 29H
pop cx
pop ax
xchg cl,ch
xor ch,ch
xor dx,dx
mul bx
or dx,dx
jz @@03
stc
jmp @@04
@@03: add cx,ax
jnc @@01
@@04: mov ax,cx
ret
inpNum endp
dbInp db 10,13,'Enter number $'
dbHex db 10,13,'Heximal numbers$'
dbDec db 10,13,'Deciimal numbers$'
dbBin db 10,13,'Binary numbers$'
dbOut db 10,13
dbBp db ' [BP]=$'
dbDi db ' [DI]=$'
end begin[/code]
Команды компиляции(название папок, мои, у Вас будут другие):


Пример работы:


Хранить в регистре ВР, рабочую информацию не допустимо, у него другое назначение. Он используется для создания стекового фрейма, обращения к параметрам.


Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа