寰満鍘熺悊璇惧悗涔犻绛旀 - 鐧惧害鏂囧簱 联系客服

发布时间 : 星期一 文章寰満鍘熺悊璇惧悗涔犻绛旀 - 鐧惧害鏂囧簱更新完毕开始阅读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