x86汇编:简单计算器
时间: 2023-10-10 10:11:55 浏览: 202
下面是一个简单的 x86 汇编语言实现的计算器,可以进行加、减、乘、除运算:
```assembly
section .data
prompt1 db "Enter the first number: ", 0
prompt2 db "Enter the second number: ", 0
prompt3 db "Result: ", 0
plus db "+", 0
minus db "-", 0
times db "*", 0
divide db "/", 0
section .bss
num1 resb 5
num2 resb 5
result resb 5
section .text
global _start
_start:
; First number input
mov eax, 4
mov ebx, 1
mov ecx, prompt1
mov edx, 20
int 0x80
mov eax, 3
mov ebx, 0
mov ecx, num1
mov edx, 5
int 0x80
; Second number input
mov eax, 4
mov ebx, 1
mov ecx, prompt2
mov edx, 23
int 0x80
mov eax, 3
mov ebx, 0
mov ecx, num2
mov edx, 5
int 0x80
; Convert num1 and num2 to integer
mov eax, num1
call atoi
mov ebx, eax
mov eax, num2
call atoi
mov ecx, eax
; Calculate the result
mov eax, ebx
add eax, ecx ; or sub, mul, div
mov [result], eax
; Output the result
mov eax, 4
mov ebx, 1
mov ecx, prompt3
mov edx, 8
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, result
mov edx, 5
int 0x80
; Exit
mov eax, 1
xor ebx, ebx
int 0x80
; atoi: Convert string to integer
; Input: EAX -> pointer to string
; Output: EAX -> integer value
atoi:
push ebp
mov ebp, esp
push ebx
xor eax, eax ; Initialize result to 0
mov ebx, 10 ; Initialize base to 10
.loop:
movzx ecx, byte [eax] ; Get the next character
cmp ecx, 0 ; Check for end of string
je .done
sub ecx, '0' ; Convert to integer
mul ebx ; Multiply by base
add eax, ecx ; Add to result
inc eax ; Increment pointer
jmp .loop
.done:
dec eax ; Point back to last digit
pop ebx
mov esp, ebp
pop ebp
ret
```
在这个例子中,我们使用了 x86 汇编语言的一些基本指令,例如 mov、add、sub、mul、div 等等。主要实现的流程是:
1. 提示用户输入第一个数字;
2. 读取用户输入的第一个数字;
3. 提示用户输入第二个数字;
4. 读取用户输入的第二个数字;
5. 将这两个数字转换为整数;
6. 进行加减乘除等数值运算;
7. 输出结果;
8. 退出程序。
这个程序只是一个简单的例子,实际上可以扩展为更复杂的计算器,例如支持浮点数、支持多种运算符、支持括号等等。
阅读全文