1. 输出 Hello World
这是最基础的字符串输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| include Irvine32.inc
.data hello db "Hello World", 0
.code main PROC mov edx, offset hello call WriteString call Crlf ; 换行 exit main ENDP
end main
|
2. 比较 3 个数找最大值
利用 cmp
指令和条件跳转来比较三个数的大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| include Irvine32.inc
.data num1 dd 10 num2 dd 20 num3 dd 30
msgMax db "最大值是: ", 0
.code main PROC mov eax, [num1] mov ebx, [num2] cmp eax, ebx jge check_num3 ; 如果 num1 >= num2 跳到检查 num3
mov eax, ebx ; 否则 num2 是更大值 check_num3: mov ebx, [num3] cmp eax, ebx jge done mov eax, ebx ; 如果 num3 大,则更新 eax
done: mov edx, offset msgMax call WriteString call WriteInt call Crlf exit main ENDP
end main
|
3. 数组求和
循环遍历数组并累加求和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| include Irvine32.inc
.data arr dd 1, 2, 3, 4, 5 arrSize dd 5 msgSum db "数组和是: ", 0
.code main PROC mov esi, offset arr mov ecx, [arrSize] xor eax, eax ; 清空 eax 用于存储和
sum_loop: cmp ecx, 0 je sum_done add eax, [esi] ; 累加数组元素 add esi, 4 ; 移动到下一个元素 dec ecx jmp sum_loop
sum_done: mov edx, offset msgSum call WriteString call WriteInt call Crlf exit main ENDP
end main
|
4. 判断偶数或奇数
使用 and
或 test
指令判断一个数是偶数还是奇数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| include Irvine32.inc
.data num dd 42 ; 输入数字 msgEven db "是偶数", 0 msgOdd db "是奇数", 0
.code main PROC mov eax, num test eax, 1 ; 判断最低位是否为 1 jz eve ; 如果为 0 是偶数
mov edx, offset msgOdd call WriteString call Crlf jmp done
eve: mov edx, offset msgEven call WriteString call Crlf
done: exit main ENDP
end main
|
5. 输入 3 个整数并找出最小值
使用 ReadInt
读取输入并比较找出最小值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| include Irvine32.inc
.data prompt1 db "请输入第一个整数: ", 0 prompt2 db "请输入第二个整数: ", 0 prompt3 db "请输入第三个整数: ", 0 msgMin db "最小值是: ", 0
num1 dd 0 ; 存储第一个整数 num2 dd 0 ; 存储第二个整数 num3 dd 0 ; 存储第三个整数
.code
main PROC ; 提示输入第一个整数 mov edx, offset prompt1 call WriteString call ReadInt mov num1, eax ; 存储第一个整数
; 提示输入第二个整数 mov edx, offset prompt2 call WriteString call ReadInt mov num2, eax ; 存储第二个整数
; 提示输入第三个整数 mov edx, offset prompt3 call WriteString call ReadInt mov num3, eax ; 存储第三个整数
; 比较并找出最小值 mov eax, num1 ; 将第一个整数加载到 eax mov ebx, num2 ; 将第二个整数加载到 ebx cmp eax, ebx ; 比较 num1 和 num2 jle next1 ; 如果 num1 <= num2,跳到 next1 mov eax, ebx ; 否则,eax = num2
next1: mov ecx, num3 ; 将第三个整数加载到 ecx cmp eax, ecx ; 比较当前的最小值和 num3 jle done ; 如果当前最小值 <= num3,跳到 done mov eax, ecx ; 否则,eax = num3
done: ; 输出最小值 mov edx, offset msgMin call WriteString call WriteInt ; 输出最小值 call Crlf exit main ENDP
end main
|