实现用8086汇编语言将45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成数字的流程图
时间: 2023-06-11 13:07:12 浏览: 47
以下是将给定的十六进制数输出为数字的8086汇编语言程序的流程图:
![流程图](https://i.imgur.com/8jI9TjP.png)
解释:
1. 开始
2. 初始化数据段和堆栈段
3. 将要输出的十六进制数存储在数据段中
4. 设置循环计数器为10(十六进制数的数量)
5. 将数据段的偏移地址存储在SI寄存器中
6. 将0存储在AX寄存器中,用于存储转换后的数字
7. 将0存储在BX寄存器中,用于存储当前处理的位数
8. 将SI寄存器中的值存储到DI寄存器中,以备后续使用
9. 将当前处理的十六进制数存储在AL寄存器中
10. 检查AL寄存器中的值是否大于等于10H(即16),如果是,则跳转到步骤13,否则跳转到步骤11
11. 将AL寄存器中的值乘以10,然后加上0,将结果存储在AX寄存器中
12. 跳转到步骤15
13. 将AL寄存器中的值减去10H(即16),然后乘以10,然后加上0AH(即10),将结果存储在AX寄存器中
14. 跳转到步骤15
15. 将AX寄存器中的值存储在堆栈中,以备后续使用
16. 将BX寄存器中的值加1
17. 检查BX寄存器中的值是否等于4(即每个十六进制数有4个位),如果是,则跳转到步骤20,否则跳转到步骤18
18. 将DI寄存器中的值增加1(即移动到下一个十六进制数)
19. 将BX寄存器中的值重置为0
20. 将循环计数器减1
21. 检查循环计数器是否等于0,如果是,则跳转到步骤23,否则跳转到步骤5
22. 结束程序
23. 将堆栈中的数字依次弹出,并输出为字符,直到堆栈为空
24. 结束程序
相关问题
如何用8086汇编语言将45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成数字
### 回答1:
以下是用8086汇编语言将数值输出成数字的示例代码:
```
; 数据段
DATA SEGMENT
NUMS DB 45H, 12H, 23H, 55H, 77H, 33H, 11H, 8AH, 3FH, 1EH
DIGITS DB 10 DUP ('$') ; 存放数字的数组,初始化为 '$'
DATA ENDS
; 代码段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA ; 初始化数据段地址
MOV DS, AX
; 将每个数值转换成数字并存放在 DIGITS 数组中
MOV SI, 0 ; SI 寄存器用于遍历 NUMS 数组
MOV CX, 10 ; CX 寄存器用于循环 10 次(即 NUMS 数组中的元素个数)
MOV DI, OFFSET DIGITS ; DI 寄存器用于遍历 DIGITS 数组
CONVERT:
MOV AL, NUMS[SI] ; 将 NUMS 数组中的元素读入 AL 寄存器
ADD AL, 30H ; 将 ASCII 码值转换成数字
MOV [DI], AL ; 将数字存入 DIGITS 数组
INC SI ; 数组下标加 1
INC DI ; 数组下标加 1
LOOP CONVERT ; 循环 10 次
; 输出 DIGITS 数组中的数字
MOV AH, 09H ; 调用 DOS 中断 21H 的功能号
LEA DX, DIGITS ; 将 DIGITS 数组的地址传入 DX 寄存器
INT 21H ; 调用 DOS 中断
; 程序结束
MOV AH, 4CH ; 调用 DOS 中断 21H 的功能号
INT 21H ; 调用 DOS 中断
CODE ENDS
; 结束语
END START
```
注:以上代码将数字输出到屏幕上,需要在 DOS 环境下运行。如果想要将数字存储到文件或其他介质中,需要使用其他的 DOS 中断。
### 回答2:
要将16进制的数字45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成十进制的数字,可以使用8086汇编语言编写以下程序:
```assembly
.model tiny
.stack 100h
.data
hex_values db 45H, 12H, 23H, 55H, 77H, 33H, 11H, 8AH, 3FH, 1EH
decimal_values db 10 dup(?) ; 用于存储转换后的十进制数字
.code
main proc
mov ax, @data
mov ds, ax
mov si, offset hex_values
mov di, offset decimal_values
xor cx, cx ; 初始化计数器
; 把每个16进制的字符转换成对应的十进制数字
convert_loop:
mov al, [si]
inc si
cmp al, 9FH
jbe digit
sub al, 7H ; 大写字母的处理
jmp store
digit:
sub al, 30H ; 数字字符处理
store:
mov [di], al
inc di
inc cx ; 计数器加1
cmp cx, 10 ; 判断是否已经处理完10个字符
jne convert_loop
; 输出十进制数字
mov si, offset decimal_values
xor cx, cx ; 重新初始化计数器
output_loop:
mov dl, [si]
add dl, 30H ; 将数字字符转换成ASCII码字符
mov ah, 2h
int 21h
inc si
inc cx
cmp cx, 10
jne output_loop
mov ax, 4C00h
int 21h
main endp
end main
```
以上程序将会输出10个十进制数字:69, 18, 35, 85, 119, 51, 17, 138, 63, 30。
### 回答3:
要将十六进制数45H, 12H, 23H, 55H, 77H, 33H, 11H, 8AH, 3FH, 1EH转换为数字,可以使用8086汇编语言中的指令来实现。
首先,需要将十六进制数加载到寄存器中。8086中的MOV指令可以用于将数据从内存加载到寄存器中。使用MOV指令将十六进制数加载到寄存器AL中。
接下来,将AL中的寄存器与30H进行逻辑与操作。这是因为当十六进制数小于10H时,只需要保留个位数值,而逻辑与操作可以将其他位数值清零。
然后,判断AL中的寄存器值是否大于9。若大于9,则需要转换为十进制的数字字符。使用ADD指令将AL的值与7H(即字符'0')相加。这样可以将其转换为相应的数字字符。
最后,使用INT 29H中断来实现将字符输出到显示器。INT 29H中断是8086汇编语言中的BIOS中断,用于在显示器上输出字符。需要将AL中寄存器的值放入到AH中,以指示输出为字符。
最后,可以将这一过程通过循环来处理所有的十六进制数。下面是8086汇编语言的示例代码:
```assembly
.model small
.stack 100h
.data
.code
main proc
mov ax, @data
mov ds, ax
mov cx, 10 ; 顶点个数
lea si, numbers ; 存储数字的数组
ConversionLoop:
mov al, [si] ; 加载十六进制数到AL中
and al, 0FH ; 保留个位数字
cmp al, 9 ; 判断是否大于9
jg ConvertToChar
; 转换为数字字符
add al, '0'
jmp Display
ConvertToChar:
; 转换为十进制数字字符
add al, 'A' - 10
Display:
mov ah, 0EH ; 指示输出字符
int 10H ; 中断调用
inc si ; 下一个十六进制数
loop ConversionLoop
mov ah, 4CH
int 21H
main endp
end main
```
此代码将输出十六进制数45H、12H、23H、55H、77H、33H、11H、8AH、3FH和1EH对应的数字。
用8086汇编语言设计一个排序算法(从大到小)演示器,在数组中已有10个未排序的整数,输入数字X(0<=X<=3)。 如果X=0,则原样输出10个未排序的整数,数之间用“,”间隔 如果X=1,将数当做无符号数进行排序,并展示排序过程; 如果X=2,将数当做有符号数进行排序,并展示排序过程; 如果X=3,将数当做移码进行排序,并展示排序过程; 如果X输入非法,则通过输出提示,并退出到DOS系统。
以下是用8086汇编语言设计的排序算法演示器代码。首先定义了一个包含10个未排序整数的数组,然后根据用户输入的数字X进行相应的操作。在排序过程中,使用冒泡排序算法。
```
.MODEL SMALL
.STACK 100H
.DATA
NUMS DB 45h, 12h, 23h, 55h, 77h, 33h, 11h, 8Ah, 3Fh, 1Eh
MSG1 DB '请输入数字X(0<=X<=3):$'
MSG2 DB '未排序的数为:$'
MSG3 DB '排序后的数为:$'
MSG4 DB '非法输入,请重新运行程序!$'
COMMA DB ',', '$'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 9
LEA DX, MSG1
INT 21H ; 输出提示信息
MOV AH, 1
INT 21H ; 读入数字X
SUB AL, 30H ; 将字符转换为数字
CMP AL, 0
JE UNSORTED ; 如果X=0,则原样输出未排序的数
CMP AL, 1
JE UNSIGNED ; 如果X=1,则按无符号数排序
CMP AL, 2
JE SIGNED ; 如果X=2,则按有符号数排序
CMP AL, 3
JE TWOSCOMPLEMENT ; 如果X=3,则按移码排序
; 非法输入
MOV AH, 9
LEA DX, MSG4
INT 21H
JMP EXIT
UNSORTED:
MOV AH, 9
LEA DX, MSG2
INT 21H ; 输出未排序的数的提示信息
; 输出未排序的数
MOV CX, 10
LEA SI, NUMS
PRINT:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT
JMP EXIT
UNSIGNED:
MOV AH, 9
LEA DX, MSG3
INT 21H ; 输出排序后的数的提示信息
; 按无符号数排序
MOV CX, 10
LEA SI, NUMS
LOOP1:
MOV BX, SI
MOV DX, BX
ADD DX, 1
LOOP2:
MOV AL, [BX]
MOV AH, [DX]
CMP AL, AH
JAE CONTINUE
XCHG AL, AH
MOV [BX], AL
MOV [DX], AH
CONTINUE:
INC BX
INC DX
LOOP LOOP2
LOOP LOOP1
; 输出排序后的数
MOV CX, 10
LEA SI, NUMS
PRINT2:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT2
JMP EXIT
SIGNED:
MOV AH, 9
LEA DX, MSG3
INT 21H ; 输出排序后的数的提示信息
; 按有符号数排序
MOV CX, 10
LEA SI, NUMS
LOOP3:
MOV BX, SI
MOV DX, BX
ADD DX, 1
LOOP4:
MOV AL, [BX]
CBW ; 将AL扩展为AX
MOV AH, [DX]
CBW ; 将AH扩展为AX
CMP AL, AH
JAE CONTINUE2
XCHG AL, AH
MOV [BX], AL
MOV [DX], AH
CONTINUE2:
INC BX
INC DX
LOOP LOOP4
LOOP LOOP3
; 输出排序后的数
MOV CX, 10
LEA SI, NUMS
PRINT3:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT3
JMP EXIT
TWOSCOMPLEMENT:
MOV AH, 9
LEA DX, MSG3
INT 21H ; 输出排序后的数的提示信息
; 按移码排序
MOV CX, 10
LEA SI, NUMS
LOOP5:
MOV BX, SI
MOV DX, BX
ADD DX, 1
LOOP6:
MOV AL, [BX]
NEG AL ; 取反
ADD AL, 1 ; 加1
MOV AH, [DX]
NEG AH ; 取反
ADD AH, 1 ; 加1
CMP AL, AH
JAE CONTINUE3
XCHG AL, AH
MOV [BX], AL
MOV [DX], AH
CONTINUE3:
INC BX
INC DX
LOOP LOOP6
LOOP LOOP5
; 输出排序后的数
MOV CX, 10
LEA SI, NUMS
PRINT4:
MOV DL, [SI]
ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, COMMA
MOV AH, 2
INT 21H
INC SI
LOOP PRINT4
EXIT:
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
```
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)