したがって、現時点での出力は次のとおりです。
エリア: 17 | ポイント: 1 | 確率: 64 / 134519798
それがいつあるべきか:
エリア: 1 | ポイント: 17 | 確率: 1 / 64
スタックにプッシュされた値は、最初から最後まで続きます。
64
1
17
1
したがって、最初に 1、次に 17...1....64 にする必要があります。最初の 1 が無視されているように見えるので、何が見つかるかを調査しようとしましたが、不足しています。スタックにプッシュしている変数に値があることを確認しました。
%include "asm_io.inc"
;
;
segment .data
display db "Area: %d | Points: %d | Probability: %d / %d",10,0
number db "", 0
;
;
segment .bss
;
radius1 resd 1 ;Radius
radius2 resd 1
radius3 resd 1
radius4 resd 1
points1 resd 1 ;Points
points2 resd 1
points3 resd 1
points4 resd 1
compArea1 resd 1 ;Computed Area
compArea2 resd 1
compArea3 resd 1
compArea4 resd 1
pie1 resd 1 ;radius*radius
pie2 resd 1
pie3 resd 1
pie4 resd 1
pb1 resd 1 ;Probability
pb2 resd 1
pb3 resd 1
pb4 resd 1
eo resd 1 ; Expected Outcome
extra resd 1
;
;
segment .text
global asm_main
extern printf
asm_main:
enter 0,0
pusha
mov eax, number
call print_string
call read_int
mov [radius1], eax
mov eax, number
call print_string
call read_int
mov [radius2], eax
mov eax, number
call print_string
call read_int
mov [radius3], eax
mov eax, number
call print_string
call read_int
mov [radius4], eax
;****************Radius End****************
mov eax, number
call print_string
call read_int
mov [points1], eax
mov eax, number
call print_string
call read_int
mov [points2], eax
mov eax, number
call print_string
call read_int
mov [points3], eax
mov eax, number
call print_string
call read_int
mov [points4], eax
;****************Points End****************
mov eax, [radius1]
imul eax, [radius1]
mov [pie1], eax
mov eax, [radius2]
imul eax, [radius2]
mov [pie2], eax
mov eax, [radius3]
imul eax, [radius3]
mov [pie3], eax
mov eax, [radius4]
imul eax, [radius4]
mov [pie4], eax
;***************Area End*******************
mov eax, [radius1]
mov [compArea1], eax
mov eax, [pie2]
sub eax, [pie1]
mov [compArea2], eax
mov eax, [pie3]
sub eax, [pie2]
mov [compArea3], eax
mov eax, [pie4]
sub eax, [pie3]
mov [compArea4], eax
;***************Computed Area Ends*********
mov eax, [compArea1]
imul eax, [points1]
mov [pb1], eax
mov eax, [compArea2]
imul eax, [points2]
mov [pb2], eax
mov eax, [compArea3]
imul eax, [points3]
mov [pb3], eax
mov eax, [compArea4]
imul eax, [points4]
mov [pb4], eax
;******************************************
mov eax, [pb1]
add eax, [pb2]
add eax, [pb3]
add eax, [pb4]
mov [eo], eax
;***************Expected Outcome Ends******
sub esp, 10h
push dword [pie4]
push dword [compArea1]
push dword [points1]
push dword [radius1]
mov dword [esp], display
call printf
add esp, 10h
popa
mov eax, 0
leave
ret
任意の助けをいただければ幸いです。