8086汇编怎么实现输入的数和300的比较
时间: 2024-05-13 14:19:28 浏览: 11
8086汇编中可以使用INT 21H来实现输入操作,具体实现方法如下:
```
MOV AH, 01H ;设置输入功能号为01H
INT 21H ;调用DOS中断21H,等待输入
SUB AL, '0' ;将输入的ASCII码转换为数值
CMP AL, 0BCh ;与300进行比较
JA ABOVE_300 ;如果大于300,跳转到ABOVE_300
JB BELOW_300 ;如果小于300,跳转到BELOW_300
JE EQUAL_300 ;如果等于300,跳转到EQUAL_300
```
其中,ABOVE_300、BELOW_300、EQUAL_300是分别用来处理大于300、小于300和等于300的情况的代码标签。
相关问题
汇编实现输入十个十六位数排序
首先需要明确一下,汇编语言的排序算法有很多种,比如冒泡排序、选择排序、插入排序、快速排序等等。这里我以冒泡排序为例进行讲解。
首先,我们需要声明一个数组来存储这十个十六位数,假设这个数组名为num,每个数占据2个字节,那么数组长度就是20个字节。在代码中可以这样声明:
```
num dw 10 dup(0) ;声明长度为10的数组num
```
然后,我们需要输入这十个十六位数。这里我以int 21h中断实现输入,每次输入一个数,输入完成后将其存储到数组中。具体实现可以参考下面的代码:
```
mov cx, 10 ;循环10次,输入10个数
mov si, offset num ;si指向数组num的首地址
input:
mov ah, 1 ;调用int 21h中断输入一个字符
int 21h
cmp al, 0dh ;判断是否输入回车键
je next ;如果是,跳转到next
mov ah, 0 ;将输入的字符转换成数字
sub al, '0'
mov bl, al
mov al, ah
sub al, '0'
mov bh, al
shl bh, 4 ;将高四位左移4位
or bl, bh ;将低四位与高四位合并成一个十六位数
mov [si], bx ;将数存储到数组中
add si, 2 ;指向数组中下一个位置
jmp input ;继续输入下一个数
next:
loop input ;循环10次,输入完成后跳转到排序
```
输入完成后,我们需要对这十个数进行排序。这里我以冒泡排序为例,具体实现可以参考下面的代码:
```
mov cx, 9 ;外层循环,循环9次
mov si, offset num ;si指向数组num的首地址
outer:
mov dx, cx ;内层循环,循环cx次
inner:
mov ax, [si] ;比较相邻两个数的大小
cmp ax, [si+2]
jle skip ;如果前一个数小于等于后一个数,跳过交换
xchg ax, [si+2] ;交换两个数的位置
mov [si], ax
skip:
add si, 2 ;指向数组中下一个位置
loop inner ;循环cx次
dec cx ;循环次数减1
cmp cx, 0 ;判断是否循环完成
jne outer ;如果没有,继续循环
```
最后,我们需要将排序后的结果输出。具体实现可以参考下面的代码:
```
mov cx, 10 ;循环10次,输出排序后的结果
mov si, offset num ;si指向数组num的首地址
output:
mov bx, [si] ;将数存储到bx寄存器中
mov ah, 2 ;调用int 21h中断输出一个字符
mov dl, bh ;输出高4位
cmp dl, 10 ;判断是否需要转换成字母
jl print_num ;如果不需要,直接输出
add dl, 7 ;将数字转换成字母
print_num:
add dl, '0' ;转换成ASCII码
int 21h
mov dl, bl ;输出低4位
cmp dl, 10 ;判断是否需要转换成字母
jl print_num ;如果不需要,直接输出
add dl, 7 ;将数字转换成字母
jmp print_num
next_output:
add si, 2 ;指向数组中下一个位置
loop output ;循环10次,输出完成后结束程序
```
完整代码如下:
```
.model small
.stack 100h
.data
num dw 10 dup(0)
.code
start:
mov ax, @data
mov ds, ax
;输入十个十六位数
mov cx, 10
mov si, offset num
input:
mov ah, 1
int 21h
cmp al, 0dh
je next
mov ah, 0
sub al, '0'
mov bl, al
mov al, ah
sub al, '0'
mov bh, al
shl bh, 4
or bl, bh
mov [si], bx
add si, 2
jmp input
next:
loop input
;冒泡排序
mov cx, 9
mov si, offset num
outer:
mov dx, cx
inner:
mov ax, [si]
cmp ax, [si+2]
jle skip
xchg ax, [si+2]
mov [si], ax
skip:
add si, 2
loop inner
dec cx
cmp cx, 0
jne outer
;输出排序后的结果
mov cx, 10
mov si, offset num
output:
mov bx, [si]
mov ah, 2
mov dl, bh
cmp dl, 10
jl print_num
add dl, 7
print_num:
add dl, '0'
int 21h
mov dl, bl
cmp dl, 10
jl print_num
add dl, 7
jmp print_num
next_output:
add si, 2
loop output
mov ah, 4ch
int 21h
end start
```
用8086汇编语言实现从键盘输入5个数求平均值
好的,下面是用8086汇编语言实现从键盘输入5个数求平均值的程序:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
COUNT DB 5 ; 用于控制循环次数的计数器
SUM DW 0 ; 用于存储输入的5个数的总和
AVG DW 0 ; 用于存储计算出的平均值
PROMPT DB '请输入第$个数:$' ; 提示语句
.CODE
MAIN PROC
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
MOV CX, COUNT ; 初始化计数器
MOV BX, 0 ; 初始化偏移量
; 循环读取输入的5个数
INPUT_LOOP:
INC BX
MOV DL, BL
ADD DL, '0'
MOV AH, 09H
MOV DX, OFFSET PROMPT
INT 21H
MOV AH, 01H
INT 21H
SUB AL, '0'
MOV AH, 0
MOV DL, 0AH
MOV DH, 00H
DIV DL
ADD SUM, AX
LOOP INPUT_LOOP
; 计算平均值并输出
MOV AX, SUM
MOV BX, COUNT
MOV DX, 0
DIV BX
MOV AVG, AX
MOV AX, AVG
CALL PRINT_NUM
MOV AH, 4CH ; 程序结束
INT 21H
MAIN ENDP
; 打印数字子程序
PRINT_NUM PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, 0 ; 初始化计数器
MOV BX, 10 ; 除数
; 计算位数
CALC_DIGIT:
INC CX
DIV BX
TEST AX, AX
JZ PRINT_LOOP
JMP CALC_DIGIT
; 打印数字
PRINT_LOOP:
XOR AH, AH
MOV DL, 0AH
DIV DL
ADD AX, '0'
PUSH AX
INC CX
TEST DX, DX
JZ PRINT_NUM
JMP PRINT_LOOP
; 输出数字
PRINT_NUM:
POP DX
MOV BX, 0 ; 初始化偏移量
MOV CX, 0 ; 初始化计数器
CMP AX, 0
JGE POSITIVE_NUM
NEG AX
MOV AH, 02H
MOV DL, '-'
INT 21H
POSITIVE_NUM:
CALL PRINT_NUM
POP DX
POP CX
POP BX
POP AX
RET
PRINT_NUM ENDP
END MAIN
```
这个程序的思路很简单,就是通过循环读取5个数并累加求和,最后再除以5计算平均值并输出。在读取每个数的时候,使用了一个字符串模板来输出提示语句,并根据计数器的值自动填充提示语句中的“$”符号。在输出数字的时候,使用了一个子程序来计算数字的位数并逐位输出。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![asm](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)