Assembler. Решить простую задачу
Код:
; Template for console application
.586
.MODEL flat, stdcall
OPTION CASEMAP:NONE
Include kernel32.inc
Include masm32.inc
IncludeLib kernel32.lib
IncludeLib masm32.lib
.CONST
MsgExit DB 13,10,"Press Enter to Exit",0AH,0DH,0
; 0AH,0DH возврат каретки и перевод строки
.DATA
B SWORD -6
D SWORD 11
X SWORD ?
fX SWORD 0 ; старшее слово результата
Zapros DB 13,10,'Input A',13,10,0
Result DB 'Result='
ResStr DB 16 DUP (' '),0
.DATA?
A SWORD ?
fA SWORD ? ; старшее слово переменной A
Buffer DB 10 DUP (?)
inbuf DB 100 DUP (?)
.CODE
Start:
Invoke StdOut,ADDR Zapros
Invoke StdIn,ADDR Buffer, LengthOf Buffer
Invoke StripLF,ADDR Buffer
; Преобразование в SDWORD
Invoke atol,ADDR Buffer ;результат в EAX
; PTR - модификатор типа, который показывает как нужно трактовать данные по заданному адресу
mov DWORD PTR A,EAX
;Вычисления
mov CX,D
add CX,8; CX:=D+8
mov BX,B
dec BX ; BX:=B-1
mov AX,A
add AX,D; AX:=A+D
imul BX ;DX:AX:=(A+D)*(B-1) умножение на слово
;хранящееся в AX
idiv CX ; AX:=(DX:AX):CX
mov X,AX
;Преобразование
Invoke dwtoa,X,ADDR ResStr
; Вывод
Invoke StdOut,ADDR Result
XOR EAX,EAX
Invoke StdOut,ADDR MsgExit
Invoke StdIn,ADDR inbuf,LengthOf inbuf
Invoke ExitProcess,0
End Start
.586
.MODEL flat, stdcall
OPTION CASEMAP:NONE
Include kernel32.inc
Include masm32.inc
IncludeLib kernel32.lib
IncludeLib masm32.lib
.CONST
MsgExit DB 13,10,"Press Enter to Exit",0AH,0DH,0
; 0AH,0DH возврат каретки и перевод строки
.DATA
B SWORD -6
D SWORD 11
X SWORD ?
fX SWORD 0 ; старшее слово результата
Zapros DB 13,10,'Input A',13,10,0
Result DB 'Result='
ResStr DB 16 DUP (' '),0
.DATA?
A SWORD ?
fA SWORD ? ; старшее слово переменной A
Buffer DB 10 DUP (?)
inbuf DB 100 DUP (?)
.CODE
Start:
Invoke StdOut,ADDR Zapros
Invoke StdIn,ADDR Buffer, LengthOf Buffer
Invoke StripLF,ADDR Buffer
; Преобразование в SDWORD
Invoke atol,ADDR Buffer ;результат в EAX
; PTR - модификатор типа, который показывает как нужно трактовать данные по заданному адресу
mov DWORD PTR A,EAX
;Вычисления
mov CX,D
add CX,8; CX:=D+8
mov BX,B
dec BX ; BX:=B-1
mov AX,A
add AX,D; AX:=A+D
imul BX ;DX:AX:=(A+D)*(B-1) умножение на слово
;хранящееся в AX
idiv CX ; AX:=(DX:AX):CX
mov X,AX
;Преобразование
Invoke dwtoa,X,ADDR ResStr
; Вывод
Invoke StdOut,ADDR Result
XOR EAX,EAX
Invoke StdOut,ADDR MsgExit
Invoke StdIn,ADDR inbuf,LengthOf inbuf
Invoke ExitProcess,0
End Start