Консультация № 144776
23.09.2008, 16:56
0.00 руб.
0 1 1
Доброго времени суток, уважаемые эксперты. Помогите пожалуйста решить задачу:
даны 3 любых положительных числа a,b,c размерностью DT,DQ,DW соответственно. Надо написать программу для нахождения суммы, результат вывести в MessageBox. Благодарен Вам за помощь.

Обсуждение

давно
Старший Модератор
31795
6196
24.09.2008, 15:13
общий
это ответ
Здравствуйте, Alexkharkov!

В приложении программа которая складывает числа и выводит в 16-ой системе.
Удачи!

Приложение:
.386
model flat
.code
includeLib D:\_CAT\_LANG\Tasm\TASM5\LIB\imp32i.lib
extrn MessageBoxA:near
extrn ExitProcess:near
begin:
;загружаем первое число
mov eax,dword ptr [a]
mov edx,dword ptr [a+4]
mov bx,word ptr [a+8]
;складываем со втрорым
add eax,dword ptr [b]
adc edx,dword ptr [b+4]
adc bx,0
;загружаем второе число
xor ecx,ecx
mov cx,c
;складываем с суммой первых двух
add eax,ecx
adc edx,0
adc bx,0
;записываем всё число в выводимую строку
;настраиваем цикл
mov ecx,10
mov esi,offset myMess
bigLoop:
;записываем старшую цифру в строку
push ebx
shr bh,4
cmp bh,9
;контроль 16-цифр
jle noHexA
add bh,7
noHexA: add bh,30h
mov [esi],bh
inc esi
pop ebx
;записываем младшую цифру в строку
and bh,0fh
cmp bh,9
;контроль 16-х цифр
jle noHexB
add bh,7
noHexB: add bh,30h
mov [esi],bh
inc esi
push ecx
;цикл сдвига на один байт
mov ecx,8
;сдвигаем побитно
smallLoop:
shl eax,1
adc edx,edx
adc bx,bx
loop smallLoop
;востанавливаем параметр цикла
pop ecx
loop bigLoop
;добавляем признак 16-го числа и конец строки
xor bh,bh
mov bl,'h'
mov [esi],bx
xor eax,eax
;вывод сообщения и выход
push eax
push eax
push offset myTitle
push offset myMess
push eax
Call MessageBoxA
call ExitProcess

.data
a dt 20400100h
b dq 20000h
c dw 20h
myTitle db 'q144776',0
myMess db 25 dup(?)
end begin
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа