section .data
; 定义字符串常量
message db "This area function is fondly brought to you by Bob Dobalina.", 0
prompt db "Please enter the radius of a circle in whole number of meters: ", 0
received db "The number %d was received.", 0
result db "The area of a circle with this radius is %d and 1/7 square meters.", 0
goodbye db "The integer part of the area will be returned to the main program. Please enjoy your circles.", 0
section .bss
radius resb 4 ; 分配4个字节的空间用于存储用户输入的半径
section .text
extern libPuhfessorP ; 引入外部库函数
global _start
_start:
; 显示欢迎消息
mov eax, 4
mov ebx, 1
mov ecx, message
mov edx, message_len
int 0x80
; 提示用户输入半径
mov eax, 4
mov ebx, 1
mov ecx, prompt
mov edx, prompt_len
int 0x80
; 调用外部库函数获取用户输入的半径
call libPuhfessorP
mov [radius], eax ; 将半径存储到radius变量中
; 显示接收到的半径
mov eax, 4
mov ebx, 1
mov ecx, received
mov edx, received_len
push dword [radius]
call printf
add esp, 4
; 计算圆的面积
mov eax, [radius]
imul eax, eax ; 半径的平方
imul eax, 22 ; 倍增22
mov edx, 7
idiv edx ; 进行整除和取余
mov ebx, eax ; 结果存储在ebx寄存器中
; 显示圆的面积
mov eax, 4
mov ebx, 1
mov ecx, result
mov edx, result_len
push ebx
call printf
add esp, 4
; 显示结束语
mov eax, 4
mov ebx, 1
mov ecx, goodbye
mov edx, goodbye_len
int 0x80
; 返回给主程序
mov eax, 1
xor ebx, ebx
int 0x80
section .data
message db "This area function is fondly brought to you by Bob Dobalina.", 0
prompt db "Please enter the radius of a circle in whole number of meters: ", 0
received db "The number %d was received.", 10, 0
result db "The area of a circle with this radius is %d and 1/7 square meters.", 10, 0
goodbye db "The integer part of the area will be returned to the main program. Please enjoy your circles.", 10, 0
section .bss
radius resb 4 ; 分配4个字节的空间用于存储用户输入的半径
section .text
extern printf
global _start
_start:
; 调用printf函数显示欢迎消息
push message
call printf
add esp, 4
; 调用printf函数提示用户输入半径
push prompt
call printf
add esp, 4
; 调用libPuhfessorP函数获取用户输入的半径
call libPuhfessorP
mov [radius], eax ; 将半径存储到radius变量中
; 调用printf函数显示接收到的半径
push dword [radius]
push received
call printf
add esp, 8
; 计算圆的面积
mov eax, [radius]
imul eax, eax ; 半径的平方
imul eax, 22 ; 倍增22
mov edx, 7 ; 除以7的结果存放在edx寄存器中
idiv edx
mov ebx, eax
; 调用printf函数显示圆的面积
push ebx
push result
call printf
add esp, 8
; 调用printf函数显示结束语
push goodbye
call printf
add esp, 4
; 返回给主程序
mov eax, 1
xor ebx, ebx
int 0x80