微机原理实验答案
1、已知有20个8位二进制数,存放在以1000H开始的存储区域内。试编写一个完整的汇编语言程序,统计其中的正数、负数、零的个数并存在1014H开始的存储区内。
STACK SEGMENT STACK
DB 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV SI,1000H
MOV DI,1014H
MOV CX,0014H
MOV BYTE PTR[DI],0
MOV BYTE PTR[DI+1],0
MOV BYTE PTR[DI+2],0
AA1:MOV AL,[SI]
CMP AL,0
JG AA2
CMP AL,0
JL AA3
INC BYTE PTR[DI+2]
INC SI
LOOP AA1
AA2: INC BYTE PTR[DI]
INC SI
LOOP AA1
AA3:INC BYTE PTR[DI+1]
INC SI
LOOP AA1
INT 03H
CODE ENDS
END START
2、在1000H开始的单元中存放着一个字(16位),将字中1的个数存入1002H单元中。
算法:要测出1的个数就应该逐位比较,可根据最高有效位是否为1来计数,然后用移位的方法把各位数逐次移到最高位去。
可以用测试字是否为0来作为结束条件,这样可缩短程序的执行时间,对不同的字循环次数不同,因此选用当型循环结构。
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV SI,1000H
MOV DI,1002H
MOV CX,0
MOV AX,[SI]
A0:TEST AX,0FFFFH
JZ A1
JNS A2
INC CX
A2:SHL AX,1
JMP A0
A1: MOV [DI],CX
INT 03H
CODE ENDS
END START
3、偏移地址为1000H开始的顺序20个单元中,存放着某班20名同学某门考试的成绩。
编写程序统计大于等于90分,80-90分;70-79分;60-69分;小于60分的人数各位多少,并将结果放在同一数据段,偏移地址为1014H开始的顺序单元中。
STACK SEGMENT STACK
DB 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV SI,1000H
MOV DI,1014H
MOV CX,0014H
MOV BYTE PTR[DI],0
MOV BYTE PTR[DI+1],0
MOV BYTE PTR[DI+2],0
MOV BYTE PTR[DI+3],0
MOV BYTE PTR[DI+4],0
AA1: MOV AL,[SI]
CMP 90
JC AA2
INC BYTE PTR[DI]
INC SI
LOOP AA1
AA2:CMP 80
JC AA2
INC BYTE PTR[DI+1]
INC SI
LOOP AA1
AA3:CMP 70
JC AA2
INC BYTE PTR[DI+2]
INC SI
LOOP AA1
AA4:CMP 60
JC AA2
INC BYTE PTR[DI+3]
INC SI
LOOP AA1
AA5: INC BYTE PTR[DI+4]
INC SI
LOOP AA1
INT 03H
CODE ENDS
END START