REMAIN
DB ?;
3.5 在DATA1之下顺序存放着以ASCII码表示的千位数,将其转换成二进制数。
MOV MOV MOV CLD XOR XOR AND CMP
CL,4; 移位次数 CH,CL; 循环次数 SI,OFFSET ASCBIN AX,AX DX,DX AL,7FH AL,'0'
ASCB1: LODSB
;不大于?0‘结束转换
JL ERR
CMP AL,'9' JG ASCB2 ;大于?9‘转ASCB2 SUB AL,30H ; 数字形式二进制数减30H
JMP ASCB3
ASCB2: CMP AL,'A' ;大于?9‘又小于?A‘结束转换
JL ERR
CMP AL,'F' JG ERR SUB
AL,37H
;大于?F‘为不合理数,结束转换 ;字符形式ASCII数减37H
ASCB3: OR DL,AL
ROL DX,CL DEC CH
JNZ ROL MOV
ASCB1 DX,CL
BIN,DX;存储转换结果
ERR: NOP HLT
ASCBIN DB '1','B,'4','3'
BIN DW
?
3.7 编写程序将MOLT中的一个8位数乘以20,乘积放在ANS中(用3种方式)。
解:第一种方法:常规乘法运算
ORG 100h
MOV AL,MOLT MOV MUL MOV
BL,20 BL
ANS,AX
HLT
MOLT DB 2 ANSDW ?
第二种方法,将MOLT连加20次
ORG 100h
MOV MOV XOR
CX,20
BX,MOLT AX,AX
CLC
ADD1:ADC AX,BX
LOOP ADD1 MOV ANS,AX HLT
MOLT DW 5
ANSDW ?
第三种方法,将―20‖连加MOLT次
ORG 100h
MOV CX,MOLT MOV BX,20 XOR AX,AX
CLC
ADD1:ADC AX,BX LOOP ADD1
MOV ANS,AX HLT
MOLT DW 5 ANSDW ?
在DATA之下存放100个无符号的8位数,找出其最大者并将其存放在KVFF单
3.8 元。
ORG 100h XOR DL,DL
DI,KVFF;
SI,BUFFER; CL,99;
LEA
NEXT0: LEA MOV
比较次数为N-1次
NEXT1: MOV
AL,[SI];
DL中始终存目前最大值
INC CMP SI; DL,AL;
JNC NEXT2; MOV DL,AL;
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:
MOV SI,DI; MOV CL,BL; 内循环次数 MOV AL,[SI]; 读数 INC SI; 移动指针
CMP AL,[SI]; 比较 JNC NEXT5; 大于转NEXT5 MOV
DL,[SI];
NEXT5:
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.
EX1:
EX2:
ORG 100h MOV CMP
AL,BVFF AL,20
JL EX1
CMP AL,60 JL EX2
MOV AL,80 JMP MOV MUL JMP
STOP BL,3 BL STOP
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]。
goon:
ORG 100h XOR AH,AH XOR DX,DX XOR BX,BX LEA LEA MOV MOV ADC
;统计结果清零 ;统计结果清零
SI,DATA DI,LEVEL
CL,CONT; 总人数送循环计数器 CX AL,[SI] ;读原始数据 [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 ;读下一个分数
LOOP GOON ;CX=CX-1,CX不为零转GOON,继续统计 LEA MOV INC SI
MOV [SI],DL INC SI
MOV [SI],BH INC SI
MOV [SI],BL INC SI
MOV [SI],AH
MOV AX,WORD PTR [DI] ;计算平均成绩 MOV CL,CONT DIV CL
MOV LEVEL,AL ;回存平均成绩
SI,BUFFER ;回存统计结果 [SI],DH
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;