《计算机硬件技术基础》实验答案程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:简单程序设计实验
(1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。
程序流程图略。 参考源程序:
DATA
SEGMENT
NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ?
DATA
ENDS
CODE
SEGMENT
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
CODE
ENDS END START
(2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。
程序流程图略。 参考源程序:
DATA SEGMENT
ARY DB 2AH,?,?
DATA ENDS
CODE
SEGMENT
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
CODE ENDS
END START
实验二:分支程序设计实验
(1)编写一个字符比较程序,比较3 个无符号字节数A,B,C 的大小,并根据比较结果对变量K 赋值:
如果3 个数不相等,则K=0;
如果3 个数中有两个相等,则K=1;
如果3 个数都相等,则K=2。
程序流程图略。
参考源程序:
DATA SEGMENT ;定义待比较数A、B、C,比较结果K
A D
B 20H
B DB 20H
C DB 20H
K DB ?
DATA ENDS
CODE SEGMENT
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
CODE ENDS
END START
(2)编写一个能实现下列表达式的程序:
⎧N = ⎨A + B A ≤B
设A,B,C 为小于128 的正整数。
⎩A −B +C
程序流程图略。
参考源程序:
DATA SEGMENT
A > B
A D
B 22H ;定义A、B、C、N
B DB 10H
C DB 01H
N DB ?
DATA ENDS
CODE SEGMENT
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
CODE ENDS
END START
实验三循环程序设计实验
(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。
程序流程图略。
参考源程序:
DA TA SEGMENT
STRN DB 'What$' ;任意定义一个字串,以“$”结尾
COUNT EQU $-STRN
N DB ?
BUF DB COUNT DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, DATA
MOV ES, AX
LEA SI, STRN
LEA DI, BUF
MOV CX, COUNT
MOV AL, 0
LP1: MOV BL, [SI] ;逐个取字符进行判断
AND BL, BL ;自己和自己做与运算
JP NEXT
;根据PF 标志位的变化进行跳转
INC AL
OR BL, 80H
NEXT: MOV [DI], BL
INC SI
INC DI
LOOP LP1
MOV N, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
(2)在FIRST 开始的一片连续的数据区中存放着100 个数据,编写一个程序,统计第1