《计算机硬件技术基础》实验答案程序

  • 格式:doc
  • 大小:373.50 KB
  • 文档页数:31

第 1 页 共 31 页

实验一:简单程序设计实验

(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 位十六进制数 X1X2 拆为 X1 和 X2 两

部分,并以 0X1 和 0X2 的形式分别存入 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

第 2 页 共 31 页

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

第 3 页 共 31 页

实验二:分支程序设计实验

(1)编写一个字符比较程序,比较 3 个无符号字节数 A,B,C 的大小,并根据比较结果

对变量 K 赋值:

如果 3 个数不相等,则 K=0;

如果 3 个数中有两个相等,则 K=1;

如果 3 个数都相等,则 K=2。

程序流程图略。

参考源程序:

DATA SEGMENT ;定义待比较数A、B、C,比较结果K

A DB 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

第 4 页 共 31 页

INT 21H

CODE ENDS

END START

(2)编写一个能实现下列表达式的程序:

⎧ N = ⎨ A + B A ≤ B

设 A,B,C 为小于 128 的正整数。

⎩ A − B + C

程序流程图略。

参考源程序:

DATA SEGMENT A > B

A DB 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

第 5 页 共 31 页

实验三 循环程序设计实验

(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符

因含有奇数个“1”而加上了校验位。统计结果存于N单元中。

程序流程图略。

参考源程序:

DATA 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

第 6 页 共 31 页

个数据‘0’之前的数据个数。

程序流程图略。 参考源程我我想你了, 你知道吗,很想你,望着天空,发现深邃 的天空里出现了你甜蜜的笑,是你吗?序:

DATA SEGMENT

FIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H ;任取 9 个数做演示

COUNT EQU $-FIRST

NUM DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV DL, 0 ;计数值初始为 0

MOV CX,COUNT

MOV BX, OFFSET FIRST

LP1: MOV AL, [BX] ;每次取一个数,与 0 比较

CMP AL, 00H

JNE NEXT

JMP EXIT ;找到 0 则退出

NEXT: INC DL ;没找到 0 则计数值加 1

INC BX

LOOP LP1

EXIT: MOV NUM, DL

MOV AH, 4CH

INT 21H

CODE ENDS

END START

第 7 页 共 31 页

实验四:子程序设计实验

将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。要求码型

转换通过子程序HEXASC实现,参数传送采用寄存器传送方式。

程序流程图略。 参考源程序:

(1)实现方法一:远过程调用

DATA SEGMENT

BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H

COUNT EQU $-BUF ;定义任意长度的一段 BUF

DATA ENDS

STACK1 SEGMENT STACK

DB 100 DUP(?) ;设置足够深度的栈区

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1

START: MOV AX,DATA

MOV DS,AX

MOV SI,OFFSET BUF

MOV CX,COUNT

AGAIN: MOV AL,[SI] ;逐个取数

MOV BL,AL

SHR AL,4

AND AL,0FH ;先对高字节部分转换(寄存器 AL 传参)

CALL FAR PTR HEXASC ;调用子程序

MOV DL,AL

MOV AH,02H ;显示高字节部分对应的字符

INT 21H

MOV AL,BL

AND AL,0FH ;再对低字节部分转换(寄存器 AL 传参)

CALL FAR PTR HEXASC ;调用子程序

MOV DL,AL

MOV AH,02H ;显示低字节部分对应的字符

INT 21H

MOV DL,20H

MOV AH,02H ;显示空格

INT 21H