2017年《计算机硬件技术基础》实验答案程序.doc
实验一:简单程序设计实验
(1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。
程序流程图略。 参考源程序:
DATASEGMENT
NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ?
NUM4 DW ? DATAENDS
CODESEGMENT
ASSUME DS:DATA, CS:CODE
START: MOV AX,DATA;数据段寄存器初始化
MOV DS,AX
MOV AX, WORD PTR NUM1
MOV DX, WORD PTR NUM1+2
DIV NUM2
MOV NUM3,AX MOV NUM4,DX
MOV AH,4CH;正常返回DOS系统
INT 21H CODEENDS
END START
(2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X1X2 拆为 X1 和 X2 两 部分,并以 0X1 和 0X2 的形式分别存入 ARY+1 和 ARY+2 单元中。
程序流程图略。 参考源程序:
DATASEGMENT ARY DB 2AH,?,?
DATAENDS
CODESEGMENT
ASSUME DS:DATA, CS:CODE START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARY;取ARY的偏移地址
MOV AL,[SI];取16进制数至AL
MOV BL,AL
AND AL,0F0H;取16进制数的高四位,即X1
SHR AL,4
MOV [SI+1],AL;存0X1
MOV AL,BL
AND AL,0FH;取16进制数的低四位,即X2
MOV [SI+2],AL;存0X2
MOV AH,4CH INT 21H
CODEENDS
END START
实验二:分支程序设计实验
(1)编写一个字符比较程序,比较 3 个无符号字节数 A,B,C 的大小,并根据比较结果 对变量 K 赋值:
如果 3 个数不相等,则 K=0;
如果 3 个数中有两个相等,则 K=1; 如果 3 个数都相等,则 K=2。
程序流程图略。 参考源程序:
DATASEGMENT;定义待比较数A、B、C,比较结果K
A DB 20H B DB 20H C DB 20H K DB ?
DATAENDS
CODESEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX MOV AL,A
CMP AL,B;对A、B进行比较,不相等则转到COMP2
JNE COMP2;相等则比较A、C
CMP AL,C
JNE K1;A、C不相等则K=1
JMP K2;A、C相等则K=2
COMP2: MOV BL,B CMP BL,C
JE K1;对B、C进行比较,相等则K=1
CMP AL,C
JE K1;对A、C进行比较,相等则K=1
K0:MOV K,0
JMP EXIT K1:MOV K,1
JMP EXIT K2:MOV K,2
EXIT:MOV AH,4CH
INT 21H
CODEENDS
END START
(2)编写一个能实现下列表达式的程序:
?
N = ?
A + B
A ≤ B
设 A,B,C 为小于 128 的正整数。
? A ? B + C
程序流程图略。 参考源程序:
DATASEGMENT
A > B
A DB 22H;定义 A、B、C、N B DB 10H
C DB 01H N DB ?
DATAENDS
CODESEGMENT
ASSUME CS:CODE, DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV AL, A CMP AL, B
JG CALCUL;A 小于或等于 B 则 N=A+B
ADD AL,B JMP EXIT
CALCUL: SUB AL, B ADC AL, C
EXIT:MOV N, AL MOV AH,4CH INT 21H
CODEENDS
END START
实验三 循环程序设计实验
(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符 因含有奇数个“1”而加上了校验位。统计结果存于N单元中。
程序流程图略。 参考源程序:
DATASEGMENT
STRN DB 'What$';任意定义一个字串,以“$”结尾
COUNT EQU $-STRN N DB ?
BUF DB COUNT DUP(?) DATA