实现用8086汇编语言将45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成数字的流程图
时间: 2023-06-11 15:07:08 浏览: 69
以下是将十六进制数转换成数字的汇编代码流程:
1. 定义一个数组,存储要转换的十六进制数。
2. 定义一个循环,循环次数等于数组长度。
3. 在每次循环中,将数组中的当前元素存储到 AL 寄存器中。
4. 将 AL 寄存器中的值右移 4 位,然后将结果存储到 BL 寄存器中。
5. 将 AL 寄存器中的值与 0FH 相与,然后将结果存储到 AL 寄存器中。
6. 如果 BL 寄存器中的值小于等于 9,则将其加上 30H,否则将其加上 37H。
7. 将 BL 和 AL 寄存器中的值分别输出。
8. 循环结束。
以下是流程图:
```
开始
定义数组
定义循环次数,初始化为数组长度
循环开始
将当前数组元素存储到 AL 寄存器中
将 AL 寄存器中的值右移 4 位,将结果存储到 BL 寄存器中
将 AL 寄存器中的值与 0FH 相与,将结果存储到 AL 寄存器中
如果 BL 寄存器中的值小于等于 9,则将其加上 30H,否则将其加上 37H
输出 BL 和 AL 寄存器中的值
循环次数减 1
如果循环次数不为 0,则跳转到循环开始
循环结束
结束
```
相关问题
如何用8086汇编语言将45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成数字
我们可以使用 8086 汇编语言中的 ASCII 码转换来将这些数字输出成字符形式。
首先,我们需要将每个数字转换为 ASCII 码。ASCII 码中,数字 0 到 9 对应的 ASCII 码是 30H 到 39H。因此,我们可以将每个数字加上 30H,得到对应的 ASCII 码。
以下是一个示例程序,可以将这些数字输出成字符形式:
```
.model small
.stack 100h
.data
nums db 45H, 12H, 23H, 55H, 77H, 33H, 11H, 8AH, 3FH, 1EH
len equ $ - nums
.code
main proc
mov ax, @data
mov ds, ax
mov cx, len
mov si, 0
mov ah, 2 ; DOS 中断号,用于输出字符
print_loop:
mov dl, nums[si] ; 取出一个数字
add dl, 30H ; 将数字转换为 ASCII 码
int ah, 0 ; 输出字符
inc si
loop print_loop
mov ah, 4ch ; DOS 中断号,用于程序退出
int 21h
main endp
end main
```
在程序中,我们将 `nums` 数组中的每个数字转换为 ASCII 码,并使用 DOS 中断号 `2` 输出字符。程序执行后,会输出 `4567235773118?.`。其中,`8` 和 `?` 是对应的 ASCII 码,因为这些数字没有对应的 ASCII 码。
用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
```
阅读全文