微机原理五类常用程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五类常用程序:传输数据求最大最小值统计正负数排序加法程序
存储器清零或置FF
1.1将1000H-1063H中的各字节内容清0(或置FFH)
1.2传输数据块
将1000H-1063H中的字节内容传递到4000H-4063H
2.找最大值最小值
从2500H-2563H中存放着数据,把其中的最大值找出来,
地址存放在3000H中
3.统计负数正数
从2100H 开始存放100个无符号数,统计有多少个正数,
多少个负数。负数个数存入2200H
4.1求1AH+02H+31H+14H+2FH+06H=???
数据1AH、0FH 、24H、4EH、18H、2DH
放在[3000H]- [3005H]处
4.2求十进制计算
25 74 89 67
+ 49 78 64 95
数据25 74 89 67放在[2400]- [2403]
数据49 78 64 95放在[2500]- [2503]
4.3将BLOCK单元开始的10个单元数相加,结果存放入BLOCK单元。若相加过程中发生溢出,停止运算,并在DL中设置溢出标志FF.
5.冒泡排序方法
5.1字节型变量V AR1、V AR2和V AR3存放有3个无符号数,将其中的内容按从大到小重新排列。
解:经重新排列后,V AR1的值最大,V AR3的值最小。由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。
编程思路:通过在三个数中找出最大值,将它与V AR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在V AR2中。汇编语言程序如下:
5.2存放在2040H-2045H中的字节数据由大到小排列
1.1将1000H-1063H中的各字节内容清0(或置FFH)
MOV SI, 1000H
MOV CX, 0064H
XOR AL,AL
L1: MOV [SI], AL
INC SI
DEC CX
JNZ L1
HLT
1.2传输数据块
将1000H-1063H中的字节数据内容传递到4000H-4063H
MOV SI, 1000H
MOV DI, 4000H
MOV CX, 0064H
L1: MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
DEC CX
JNZ L1
HLT
2. 从2100H 开始存放100个无符号数,求最大值并存入单元2200H
MOV SI, 2100H
MOV CX, 0064H
XOR AL,AL
L1: CMP AL, [SI]
JNC L2
MOV AL , [SI]
L2: INC SI
DEC CX
JNZ L1
MOV [2200], AL
HLT
如果求最小值
XOR AL,AL 改为MOV AL,0FFH
JNC L2 改为JC L2
或者MOV [SI], AL
INC SI
相应MOV CX, 0063H
3.统计负数正数
从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。负数个数存入2200H MOV SI, 2100H
MOV CX, 0064H
XOR DL,DL
L1: MOV AL, [SI]
AND AL,AL(/AND AL, FFH/TEST AL, 80H)
JNS L2
INC DL
L2: INC SI
LOOP L1
MOV [2200],DL
HLT
LOOP L1可以改为
DEC CX
JNZ L1
求最大最小值JNC JC
求正负数用JS JNS
4.1 1AH+0FH +24H+4EH+18H+2DH=???0E计算
数据1AH、0FH 、24H、4EH、18H、2DH放在[3000H]- [3005H]处
参考程序:
MOV SI,3000H
MOV CX,0006H
XOR AL,AL
AA: ADD AL,[SI]
INC SI
DEC CX
JNZ AA
MOV [3040H] ,AL
HLT
4.2求十进制计算
25 74 89 67
+ 49 78 64 95
数据25 74 89 67放在[2400]- [2403]
数据49 78 64 95放在[2500]- [2503]
MOV SI,2400H
MOV DI,2500H
MOV BX,2600H
MOV CX,0004H
XOR AL,AL
AA:MOV AL,[SI]
ADC AL,[DI]
DAA
MOV [BX],AL
INC SI
INC DI
INC BX
LOOP AA
HLT
5.冒泡排序方法
5.1字节型变量V AR1、V AR2和V AR3存放有3个无符号数,将其中的内容按从大到小重新排列。
解:经重新排列后,V AR1的值最大,V AR3的值最小。由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。
编程思路:通过在三个数中找出最大值,将它与V AR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在V AR2中。汇编语言程序如下:
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
DA TA SEGMENT
V AR1 DB 46H ;先假设一组值,以便检验程序设计的正确性
V AR2 DB 15H
V AR3 DB 0A2H
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX, DA TA
MOV DS, AX
MOV ES, AX
MOV AX, STACK