发布时间 : 星期一 文章寰満鍘熺悊璇惧悗涔犻绛旀 - 鐧惧害鏂囧簱更新完毕开始阅读093b1599340cba1aa8114431b90d6c85ec3a88c6
NEXT1: MOV AL,[SI]; INC SI; CMP DL,AL; JNC NEXT2; MOV DL,AL;
DL中始终存目前最大值
NEXT2: DEC CL;
JNZ NEXT1; MOV [DI],DL; 最大值存储
HLT
BUFFER DB ;自行定义100个数据
KVFF DB ?
3.9 若将数据按大小顺序排序,试编写程序..
解:此处采用 “冒泡法”予以处理:
ORG 100h LEA MOV
DI,BUFFER; 数据区 BL,99; 外循环次数
NEXT0:
NEXT3:
NEXT5:
MOV SI,DI; MOV CL,BL; 内循环次数 MOV AL,[SI]; 读数 INC SI; 移动指针 CMP AL,[SI]; 比较 JNC NEXT5; 大于转NEXT5 MOV DL,[SI]; MOV [SI-1],DL; MOV [SI],AL; 不大于互换 DEC CL; 内循环次数减一
JNZ DEC JNZ HLT
NEXT3; BL; 外循环次数减一 NEXT0
BUFFER DB 自行定义100个字节型数据
3.10 在BVFF单元中有一个BCD数A,试根据下列关系编写程序,计算结果存在DES中.
A<20,Y=3*A; A<60,Y=A-20; A>=60,Y=80.
ORG 100h MOV AL,BVFF CMP AL,20 JL EX1 CMP AL,60 JL EX2 MOV AL,80 JMP STOP EX1: MOV BL,3 MUL BL JMP STOP EX2: SUB AL,20 STOP: MOV DES,AL HLT BVFF DB 8 DES DB ?
3.11址为DATAB开始的80个单元中,存放某班80个学生的某课程成绩,要求:
统计>=90分、80~89分、70~79分、60~69分、60分以下的人数,结果存放在BTRX开始的5个单元中
求平均成绩,结果存放在LEVEL中。
解:寄存器使用分配:90分以上在DH,80分以上在DL,70分以上在BH,60分以上在BL,60分以下在AH,总分、均分都在[DI]。
ORG 100h XOR AH,AH XOR DX,DX XOR BX,BX
;统计结果清零 ;统计结果清零
LEA SI,DATA LEA DI,LEVEL
MOV CL,CONT; 总人数送循环计数器 CX goon: MOV AL,[SI] ;读原始数据
ADC [DI], AL;累加总分 ADC [DI+1],0 ;计算进位
CMP AL,90
JL PP8 ; 不高于90分者转PP8 INC DH ; 90--100分的人数加一 JMP STOR
PP8:
PP7:
PP6:
CMP AL,80 JL PP7 ;不高于80分转PP7 INC DL ;80----89分的人数加一 JMP STOR CMP AL,70 JL PP6 ;不高于70分者转PP6 INC BH ;70---79分的人数加一 JMP STOR CMP AL,60 JL PP5 ;不高于60分者转PP5 INC BL ;60---69分的人数加一
JMP STOR
PP5: INC AH ;低于60分的人数加一 STOR:INC SI ;读下一个分数
GOON
;CX=CX-1,CX不为零转GOON,继续统计 LEA SI,BUFFER ;回存统计结果
MOV INC SI MOV INC SI MOV INC SI MOV INC SI MOV MOV
[SI],DH [SI],DL [SI],BH [SI],BL
[SI],AH
AX,WORD PTR [DI] ;计算平均成绩
LOOP
MOV CL,CONT DIV CL
MOV LEVEL,AL ;回存平均成绩
HLT
CONT DB 10
DATA DB 30,65,99,80,75, 89,100,45,60,70 BUFFER DB ?,?,?,?,? LEVEL DB ? ,?
3.12 求两个有符号数(DATA1,DATA2)差的绝对值,结果存入DATA3.
ORG 100h
MOV AL,DATA1;读入被减数 SUB AL,DATA2;减去减数 JC CHANGE;
JMP STOR CHANGE: NEG AL STOR: MOV DATA3,AL HLT DATA1 DB 3 DATA2 DB 5 DATA3 DB ?
3.13 存从40000H到4BFFH的个单元均写入55H,并再逐个读出,验证是否一致,若一致,置AL为7EH,否则置AL为81H.
ORG 100h MOV AX,4000H; MOV DS,AX; MOV SI,0 START: MOV CX,0BFFFH BEGIN: MOV [SI],55H MOV AL,[SI] INC SI CMP AL,55H JNZ ERR LOOPBEGIN MOV AL,7EH JMP STOP ERR: MOV AL,81H STOP: HLT
3.14~3.15 端口03FBH的BIT5为状态标志,当该位为1时,表示外设忙,不能接收数据;当为0时,表示外设闲,可以接收数据;当CPU向端口03F8H写入一个字节的数据时,03FBH的BIT5置1,当它变为0状态时,又可以写入下一个数据。据此编写将起始地址为SEDAT的50个数据输出到03F8H端口的程序。
WAIT:
MOV DX,03FBH IN AL,DX
TEST AL,0010 0000B;(20H)
JZ SEND JMP WAIT SEND:MOV DX,3F8H MOV AL,[SI]; CMP AL,0AH;输出字串结束标志符
JZ STOP OUT DX,AL
WAIT
JMP
STOP:HLT