movsx ebx, d
movsx eax, k
add ebx, eax
jz label1
movsx ecx, a
movsx eax, b
add eax, ecx
cdq
idiv ebx
.386
.model flat, stdcall
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
Lab_Caption db "Lab8!",0
Print_Mask db "%hd",0 ;у нас слово, а не двойное слово!!!
Print_Mask2 db " %hd",0
Print_Mess DB "The result is: "
Print_Buff db 16 dup (0) ;увеличим буфер
Chars_Number dd ?
a db 127
b db -27
k db 10
d db -16
rez dw 0
tail dw 0
.code
main:
call AllocConsole
or EAX,EAX
jz fail
push offset Lab_Caption
call SetConsoleTitleA
or EAX,EAX
jz fail
sub dx,dx
sub ax,ax
mov al,d
cbw
mov bx,ax
mov al,k
cbw
add bx,ax ;bx=c+d
mov al,a
cbw
mov cx,ax
mov al,b
cbw
add ax,cx ;ax=a+b
cmp bx,0
je label1
idiv bx
cbw
mov rez,ax ;лучше так, а не add
mov tail,dx ;остаток
label1 :
push DWORD ptr rez
push offset Print_Mask
push offset Print_Buff
call wsprintf
add SP,12
cmp tail, 0 ;если остаток не 0, то добавим и его
je print_message
;вычислим адрес, куда запишем остаток
push offset Print_Mess
call lstrlen ;длина строки
add eax, offset Print_Mess
push DWORD ptr tail ;остаток, отделенный двумя пробелами
push offset Print_Mask2
push eax ;адрес
call wsprintf
add SP,12
print_message:
push -11
call GetStdHandle
mov esi, eax ;сохраним handle
push offset Print_Mess
call lstrlen ;считаем длину сообщения
push 0
push offset Chars_Number
push eax ;длина
push offset Print_Mess
push esi ;handle
call WriteConsoleA
push -10
call GetStdHandle
push 0
push offset Chars_Number
push 1
push offset Print_Buff
push EAX
call ReadConsoleA
fail:
push 0
call ExitProcess
end main
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.