南京邮电大学汇编语言语法练习及分支循环程序设计
时间: 2023-05-30 08:07:53 浏览: 244
1. 用汇编语言编写程序,求1~10的和。
代码如下:
```
.model small
.stack 100h
.data
sum dw 0
.code
main proc
mov ax, 0
mov cx, 10
mov bx, 1
add_loop:
add ax, bx
inc bx
loop add_loop
mov sum, ax
mov ah, 09h
mov dx, offset msg1
int 21h
mov ax, sum
call disp_num
mov ah, 4ch
int 21h
disp_num proc
; 将数字转换为字符串并输出
push ax
push bx
push cx
mov bx, 10
mov cx, 0
num_loop:
xor dx, dx
div bx
push dx
inc cx
test ax, ax
jnz num_loop
; 输出字符串
mov ah, 02h
pop ax
out_loop:
pop dx
add dl, 30h
mov ah, 02h
int 21h
loop out_loop
; 换行
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
; 恢复寄存器
pop cx
pop bx
pop ax
ret
msg1 db '1 + 2 + 3 + ... + 10 = $'
end main
```
2. 用汇编语言编写程序,输入三个数,输出其中最大的一个数。
代码如下:
```
.model small
.stack 100h
.data
a dw ?
b dw ?
c dw ?
max dw ?
msg1 db '请输入三个整数,用空格隔开:$'
msg2 db '最大的数是:$'
.code
main proc
mov ax, @data
mov ds, ax
; 输入三个数
mov ah, 09h
mov dx, offset msg1
int 21h
mov ah, 0ah
lea dx, a
int 21h
lea dx, b
int 21h
lea dx, c
int 21h
; 比较三个数
mov ax, a
cmp ax, b
jg a_b
mov ax, b
a_b:
cmp ax, c
jg a_c
mov ax, c
a_c:
mov max, ax
; 输出最大的数
mov ah, 09h
mov dx, offset msg2
int 21h
mov ax, max
call disp_num
; 退出程序
mov ah, 4ch
int 21h
disp_num proc
; 将数字转换为字符串并输出
push ax
push bx
push cx
mov bx, 10
mov cx, 0
num_loop:
xor dx, dx
div bx
push dx
inc cx
test ax, ax
jnz num_loop
; 输出字符串
mov ah, 02h
pop ax
out_loop:
pop dx
add dl, 30h
mov ah, 02h
int 21h
loop out_loop
; 换行
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
; 恢复寄存器
pop cx
pop bx
pop ax
ret
end main
```
3. 用汇编语言编写程序,输入一个正整数n,输出1~n之间的所有素数。
代码如下:
```
.model small
.stack 100h
.data
n dw ?
msg1 db '请输入一个正整数:$'
msg2 db '1 到 '
msg3 db ' 之间的素数有:$'
.code
main proc
mov ax, @data
mov ds, ax
; 输入一个正整数
mov ah, 09h
mov dx, offset msg1
int 21h
mov ah, 01h
int 21h
sub al, 30h
mov n, ax
; 输出1到n之间的素数
mov ah, 09h
mov dx, offset msg2
int 21h
mov ax, 1
call disp_num
mov dx, offset msg3
int 21h
mov cx, n
mov bx, 2
cmp cx, bx
jl end_loop
mov ax, 2
prime_loop:
mov dx, ax
div bx
cmp dx, 0
jz not_prime
call disp_num
mov ah, 02h
mov dl, ','
int 21h
not_prime:
inc ax
cmp ax, cx
jle prime_loop
end_loop:
; 退出程序
mov ah, 4ch
int 21h
disp_num proc
; 将数字转换为字符串并输出
push ax
push bx
push cx
mov bx, 10
mov cx, 0
num_loop:
xor dx, dx
div bx
push dx
inc cx
test ax, ax
jnz num_loop
; 输出字符串
mov ah, 02h
pop ax
out_loop:
pop dx
add dl, 30h
mov ah, 02h
int 21h
loop out_loop
; 恢复寄存器
pop cx
pop bx
pop ax
ret
end main
```
4. 用汇编语言编写程序,输入一个正整数n,计算1~n之间所有奇数的和。
代码如下:
```
.model small
.stack 100h
.data
n dw ?
sum dw 0
msg1 db '请输入一个正整数:$'
msg2 db '1 到 '
msg3 db ' 之间所有奇数的和为:$'
.code
main proc
mov ax, @data
mov ds, ax
; 输入一个正整数
mov ah, 09h
mov dx, offset msg1
int 21h
mov ah, 01h
int 21h
sub al, 30h
mov n, ax
; 计算1到n之间所有奇数的和
mov ah, 09h
mov dx, offset msg2
int 21h
mov ax, 1
call disp_num
mov dx, offset msg3
int 21h
mov ax, 1
mov cx, n
sum_loop:
add sum, ax
add ax, 2
cmp ax, cx
jle sum_loop
mov ax, sum
call disp_num
; 退出程序
mov ah, 4ch
int 21h
disp_num proc
; 将数字转换为字符串并输出
push ax
push bx
push cx
mov bx, 10
mov cx, 0
num_loop:
xor dx, dx
div bx
push dx
inc cx
test ax, ax
jnz num_loop
; 输出字符串
mov ah, 02h
pop ax
out_loop:
pop dx
add dl, 30h
mov ah, 02h
int 21h
loop out_loop
; 换行
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
; 恢复寄存器
pop cx
pop bx
pop ax
ret
end main
```
阅读全文