Деление двух чисел и вывод результатов в квадраты - Assembler
Формулировка задачи:
Необходимо написать программу для деления двух чисел и вывод результатов в квадраты на экране. В первый квадрат поместить частное, во второй - остаток от деления. Далее при нажатии на 1 квадрат с частным должен двигаться вверх до своей исходной позиции, а квадрат с остатком вправо до исходной позиции. По нажатию 2 все должно происходить наоборот. Компилятор TASM. Заранее спасибо.
Решение задачи: «Деление двух чисел и вывод результатов в квадраты»
textual
Листинг программы
model tiny,pascal .code org 100h start: mov ah,9 lea dx,dbInpA int 21h call InpNum mov dwNumA,di @@00: mov ah,9 lea dx,dbInpB int 21h call InpNum or di,di jz @@00 mov dwNumA,di mov ax,13h int 10h mov ax,0A000h mov es,ax mov si,50 mov di,30 mov cx,30 @@01: push cx call OutSqr,si,di,80,12 call outStr,si,di,offset dbStr mov cx,50h @@02: push cx mov cx,5000h @@03: loop @@03 ; mov cx,-1 ;@@04: loop @@04 ; mov cx,-1 ;@@05: loop @@05 pop cx loop @@02 call OutSqr,si,di,80,0 inc si inc di pop cx loop @@01 xor ax,ax int 16h mov ax,3 int 10h ret dbStr db 'is text$' dbInpA db 10,13,'input A:$' dbInpB db 10,13,'input B:$' OutStr proc a:word,b:word,c:word uses ax,bx,cx,dx,si,di mov ah,2 mov dx,a shr dl,3 mov bx,b shr bl,2 mov dh,bl xor bx,bx int 10h mov ah,09h mov dx,c int 21h OS2: ret OutStr endp OutSqr proc a:word,b:word,c:word,d:word uses ax,bx,cx,dx,di,si mov si,320 mov ax,a mul si add ax,b mov di,ax mov cx,c mov ax,d OSq1: push cx push di mov cx,c rep stosb pop di pop cx add di,320 loop OSq1 ret OutSqr endp InpNum proc xor di,di mov si,10 IN01: xor ax,ax int 16h cmp al,13 jz IN02 cmp al,'0' jb IN01 cmp al,'9' ja IN01 int 29h and ax,0fh xchg di,ax xor dx,dx mul si add di,ax jmp IN01 IN02: ret InpNum endp dwNumA dw ? dwNumB dw ? end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д