Преобразовать в BCD-формат(уп.) и сложить - Assembler
Формулировка задачи:
Я написал программу по примерам, но это, как я понял, ещё не упак. числа. Я начал углублённо изучать ассемблер, но у нас через каждые 2 недели лабы, и я тупо не успеваю читать и писать одновременно(ассемблер пока ещё худо даётся) (учусь по-вашему электронному учебнику кстати, спасибо большое). В общем нужно сложить 2 10-ти разрядных числа упакованных в BCD и вывести рез. на экран. Проблема в том, что осталось их упаковать. Или сложение там тоже как-то поменяется?
;.386 .model SMALL stack 100h DATASEG NEGA dB 0 SEN_1 dB 0Ah,0Dh,'First num:$' ;Вывод предложения ввода первого числа BUF_1 dB 11 ;Буфер первого числа LEN_1 dB ? ;Само число Opnd1 dB 12 dup( ? ) SEN_2 dB 0Ah,0Dh,'Second num:$' ;Вывод предложения ввода второго числа BUF_2 dB 11 ;Буфер второго числа LEN_2 dB ? ;Само число Opnd2 dB 12 dup( ? ) ANSWER dB 0Ah, 0Dh, 'Sum ' Res dB 12 dup(' '),'$' SEN_SUM dB 0Ah,0Dh dB 'Complete work - Esc, continue - another key' dB '$' CODESEG STARTUPCODE PUSH DS POP ES ; ES <- DS BEGIN: ;Ввод первого слагаемого B1: LEA DX, SEN_1 MOV AH, 09h INT 21h LEA DX, BUF_1 MOV AH, 0Ah INT 21h CMP LEN_1, 0 JE B1 ;проверка 0-9 и очистка старш.тетрады LEA BX, Opnd1 XOR CX, CX MOV CL, LEN_1 XOR SI, SI T1: MOV AL, [BX][SI] ;CMP AL, '-' ;JE H ;JNZ S ;H: ; ADD NEGA, 1 ;S: CMP AL, '0' JB B1 ; ошибка CMP AL, '9' JA B1 ; ошибка AND AL, 0Fh MOV [BX][SI], AL INC SI LOOP T1 ;прижать к правому краю MOV CL, LEN_1 CMP CL, 10 JE E1 MOV DI, 9 MOV SI, CX DEC SI P1: MOV AL, [BX][SI] MOV [BX][DI], AL DEC DI DEC SI LOOP P1 ;обнулить лишнее XOR DI, DI MOV CL, 10 SUB CL, LEN_1 N1: MOV byte ptr [BX][DI], 0 INC DI LOOP N1 E1: ;Ввод второго слагаемого B2: LEA DX, SEN_2 MOV AH, 09h INT 21h LEA DX, BUF_2 MOV AH, 0Ah INT 21h CMP LEN_2, 0 JE B2 ;проверка 0-9 и очистка старш.тетрады LEA BX, Opnd2 XOR CX, CX MOV CL, LEN_2 XOR SI, SI T2: MOV AL, [BX][SI] CMP AL, '0' JB B2 ; ошибка CMP AL, '9' JA B2 ; ошибка AND AL, 0Fh MOV [BX][SI], AL INC SI LOOP T2 ;прижать к правому краю MOV CL, LEN_2 CMP CL, 10 JE E2 MOV DI, 9 MOV SI, CX DEC SI P2: MOV AL, [BX][SI] MOV [BX][DI], AL DEC DI DEC SI LOOP P2 ;обнулить лишнее XOR DI, DI MOV CL, 10 SUB CL, LEN_2 N2: MOV byte ptr [BX][DI], 0 INC DI LOOP N2 E2: ;Сложение MOV CX, 10 CLC LEA SI, Opnd1+9 LEA DI, Opnd2+9 LEA BX, Res+10 A1: MOV AL, [SI] ADC AL, [DI] AAA MOV [BX], AL DEC SI DEC DI DEC BX LOOP A1 MOV AL, 0 ADC AL, 0 MOV [BX], AL ;Преобразование результата в ASCII MOV CX, 11 A2: OR BYTE PTR [BX], 30h ;Интерпритировать данный операнд в байт INC BX LOOP A2 ;Вывод результата LEA DX, ANSWER MOV AH, 09h INT 21h ;Запрос на продолжение работы LEA DX, SEN_SUM MOV AH, 09h INT 21h MOV AH, 08h INT 21h CMP AL, 27 ;ESC JE QUIT JMP BEGIN ;Конец работы QUIT: EXITCODE 0 END
Решение задачи: «Преобразовать в BCD-формат(уп.) и сложить»
textual
Листинг программы
1 2 3 4 5 6 7 8 9 10
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д