Проект калькулятор на ассемблере 8086 - помочь
напишите программу в 8086 году с этими требованиями:
1. введите 2 номера от пользователя (нет необходимости проверять целостность ввода)
2. вычитание и сложение действий между 2 числами
3. Разделите действие между двумя числами
4. Действие мультипликации между 2 числами
5. выведите результат на экран в десятичном, двоичном или шестнадцатеричном виде в зависимости от выбора
как это работает: программа сначала получит нажатие клавиши и будет действовать в соответствии с этим выбором
'0' - ввод 2 чисел
'1' - добавить действие
'2' - Действие вычитания
'3' - умножение
'4' - деление
'5' - Печать
__________________
D - печать в десятичной системе счисления
H - печать в шестнадцатеричном формате
B - печать в двоичном формате
'0' - выход из программы
Я застрял на создании этой программы... Кто-нибудь может помочь? это те коды, которые я делал до сих пор, но застрял на том, как прогрессировать
; multi-segment executable file template. data segment ; add your data here! NUM DW 1254 STR DB 16 DUP (20H),0AH,0DH,'$' D DW 10 O DW 8 B DW 2 H DW 16 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 ; add your code here CALL PRINT_HEX CALL PRINT_DEC CALL PRINT_OCT CALL PRINT_BIN CALL SOF ;========================== PRINT_DEC PROC MOV BX , 15 MOV AX , NUM L1: MOV DX , 0 DIV D MOV STR[BX] , 20H ADD STR[BX] , DL ADD STR[BX] , 10H DEC BX CMP AX , 0 JNZ L1 LEA DX , STR MOV AH , 9 INT 21H ret PRINT_DEC ENDP ;========================== PRINT_HEX PROC MOV BX , 15 MOV AX , NUM L3: MOV DX , 0 MOV STR[BX] , 20H DIV H CMP DL , 9 JLE L11 ADD STR[BX] , 7 L11: ADD STR[BX] , DL ADD STR[BX] , 10H DEC BX CMP AX , 0 JNZ L3 LEA DX , STR MOV AH , 9 INT 21H ret PRINT_HEX ENDP ;========================== PRINT_BIN PROC MOV BX , 15 MOV AX , NUM L2: MOV DX , 0 DIV B MOV STR[BX] , 20H ADD STR[BX] , DL ADD STR[BX] , 10H DEC BX CMP AX , 0 JNZ L2 LEA DX , STR MOV AH , 9 INT 21H ret PRINT_BIN ENDP ;============================= PRINT_OCT PROC MOV BX , 15 MOV AX , NUM L8: MOV DX , 0 DIV O MOV STR[BX] , 20H ADD STR[BX] , DL ADD STR[BX] , 10H DEC BX CMP AX , 0 JNZ L8 LEA DX , STR MOV AH , 9 INT 21H ret PRINT_OCT ENDP ;============================= SOF: 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.
name Calc data segment ETR DB 0AH,0DH,'$' NUM1 DB 0 NUM2 DB 0 RESULT DB 5 DUP ('0'),'$' TEMP DB 10 data ends sseg segment stack sseg ends code segment assume cs:code, ds:data, ss:sseg start: mov ax ,data mov ds, ax CALL GET_NUMBER MOV NUM1 , CL CALL GET_NUMBER MOV NUM2 , CL MOV AL , NUM1 ADD AL , NUM2 CALL PRINT_DEC JMP SOOF ;--------------------------- GET_NUMBER : MOV DX , 0 MOV CL , 0 L1: MOV AH , 1 INT 21H CMP AL , 0DH JE END_INPUT AND AL , 0FH MOV CH , AL MOV AL , CL MUL TEMP ADD AL , CH MOV CL , AL JMP L1 END_INPUT: RET ;----------------------- PRINT_DEC: MOV SI , 4 L2: MOV AH , 0 CMP AL , 0 JE END_PRNDC DIV TEMP ADD RESULT[SI] , AH DEC SI JMP L2 END_PRNDC : LEA DX , ETR MOV AH , 9 INT 21H LEA DX , RESULT MOV AH , 9 INT 21H RET ;-----------------------
Что я уже пробовал:
я попытался посмотреть в интернете, как получить ввод от пользователя и сделать это меню мне нужно, но я не могу понять это.. бесконечные часы на этом крошечном проекте и теперь застрял с разочарованием..