Деление чисел и их последующий вывод - Assembler
Формулировка задачи:
Задание такое: Вводиться число, если больше 0 то выполняем x2\ (c+d), меньше x(c+5), равно 0 то (2b-d)\2a. По алгоритму вроде правильно но беда при выводе, где в уравнении было деление.
И еще(другое задание), В числе Х найти вторую по величине цифру, если в числе могут быть одинаковые цифры. У меня беда с разделение числа по цифрам, div есть, но привычного mod нету, первую цифру вроде бы отделил,а с последующими косяк. Помогите советами) Спасибо!
Z1
Z2
include emu8086.inc
; multi-segment executable file template.
data segment
a db 5
b db -6
c db 2
d db 1 \
x dw ?
pkey db "press any key...$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
call SCAN_NUM
mov x,cx
xor ax,ax
l1: cmp x,0
jnz m1
mov al,b
add al,al
sub al,d
mov bl,a
add bl,bl
div bl
jmp l
M1: cmp x,0
jns M2
mov al,c
add al,5
mul x
jmp L
m2: mov ax,x
mul x
mov bl,c
add bl,d
div bl
L: CALL pthis
DB 13, 10, 'Otvet: ', 0
CALL PRINT_NUM
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS ;
DEFINE_PTHIS
end start ; set entry point and stop the assembler.; multi-segment executable file template.
data segment
x1 db ?
x2 db ?
x3 db ?
x4 db ?
pkey db "press any key...$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ax,0FCD7h
mov di,ax
mov bx,10
div bx
mov x1,dl
lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.Решение задачи: «Деление чисел и их последующий вывод»
textual
Листинг программы
mov ax,0FCD7h mov bx,10 lea di,x0 @@01: xor dx,dx div bx mov [di],dl inc di or ax,ax jnz @@01