汇编语言循环程序设计能够从键盘接受10个输入数据,并按从大到小的顺序排列后显示出来
时间: 2024-03-08 17:49:50 浏览: 85
好的,我来为您详细解答一下。
首先,我们需要使用汇编语言编写一个循环程序,实现从键盘接受10个输入数据并存储到内存中。
下面是一个简单的示例代码:
```asm
mov bx, 0 ; 初始化计数器
mov cx, 10 ; 设置循环次数
input_loop:
mov ah, 01h ; 设置输入功能号
int 21h ; 调用DOS中断21h,等待输入
sub al, 30h ; 将输入字符转换为数字
mov ah, 0 ; 清空高位
mov [input+bx], al ; 存储到内存中
inc bx ; 计数器加1
loop input_loop ; 循环输入
input:
times 10 db 0 ; 申请10个字节的内存,用于存储输入数据
```
接下来,我们需要编写排序算法,将输入的数据按从大到小的顺序排列。
这里使用冒泡排序算法,代码如下:
```asm
mov bx, 0 ; 初始化计数器
mov cx, 9 ; 设置循环次数,因为每次比较会减少一个数的比较
outer_loop:
mov si, 0 ; 初始化si为0,用于内层循环的计数器
inner_loop:
mov al, [input+si] ; 取出当前位置的值
cmp al, [input+si+1] ; 比较当前值和下一个值的大小
jle skip_swap ; 如果当前值比下一个值大,跳过交换
xchg al, [input+si+1] ; 交换当前值和下一个值
mov [input+si], al ; 存回当前位置
skip_swap:
inc si ; 计数器加1
cmp si, cx ; 判断是否到达循环上限
jle inner_loop ; 如果未到达,继续内层循环
dec cx ; 每次外层循环结束,循环次数减少1
cmp cx, 0 ; 如果循环次数为0,跳出循环
jne outer_loop
```
最后,我们将排好序的数据输出到屏幕上,代码如下:
```asm
mov bx, 0 ; 初始化计数器
mov cx, 10 ; 设置循环次数
output_loop:
mov al, [input+bx] ; 取出当前位置的值
add al, 30h ; 将数字转换为字符
mov ah, 02h ; 设置输出功能号
int 21h ; 调用DOS中断21h,输出字符
inc bx ; 计数器加1
loop output_loop ; 循环输出
mov ah, 4Ch ; 设置功能号,用于程序结束
int 21h ; 调用DOS中断21h,程序结束
```
完整代码如下:
```asm
.model small
.stack 100h
.data
input:
times 10 db 0 ; 申请10个字节的内存,用于存储输入数据
.code
mov bx, 0 ; 初始化计数器
mov cx, 10 ; 设置循环次数
input_loop:
mov ah, 01h ; 设置输入功能号
int 21h ; 调用DOS中断21h,等待输入
sub al, 30h ; 将输入字符转换为数字
mov ah, 0 ; 清空高位
mov [input+bx], al ; 存储到内存中
inc bx ; 计数器加1
loop input_loop ; 循环输入
mov bx, 0 ; 初始化计数器
mov cx, 9 ; 设置循环次数,因为每次比较会减少一个数的比较
outer_loop:
mov si, 0 ; 初始化si为0,用于内层循环的计数器
inner_loop:
mov al, [input+si] ; 取出当前位置的值
cmp al, [input+si+1] ; 比较当前值和下一个值的大小
jle skip_swap ; 如果当前值比下一个值大,跳过交换
xchg al, [input+si+1] ; 交换当前值和下一个值
mov [input+si], al ; 存回当前位置
skip_swap:
inc si ; 计数器加1
cmp si, cx ; 判断是否到达循环上限
jle inner_loop ; 如果未到达,继续内层循环
dec cx ; 每次外层循环结束,循环次数减少1
cmp cx, 0 ; 如果循环次数为0,跳出循环
jne outer_loop
mov bx, 0 ; 初始化计数器
mov cx, 10 ; 设置循环次数
output_loop:
mov al, [input+bx] ; 取出当前位置的值
add al, 30h ; 将数字转换为字符
mov ah, 02h ; 设置输出功能号
int 21h ; 调用DOS中断21h,输出字符
inc bx ; 计数器加1
loop output_loop ; 循环输出
mov ah, 4Ch ; 设置功能号,用于程序结束
int 21h ; 调用DOS中断21h,程序结束
end
```
希望能够对您有所帮助!
阅读全文