微机原理第二课后作业第五八章朱金钧.docx

上传人:b****5 文档编号:6071804 上传时间:2023-01-03 格式:DOCX 页数:92 大小:484.39KB
下载 相关 举报
微机原理第二课后作业第五八章朱金钧.docx_第1页
第1页 / 共92页
微机原理第二课后作业第五八章朱金钧.docx_第2页
第2页 / 共92页
微机原理第二课后作业第五八章朱金钧.docx_第3页
第3页 / 共92页
微机原理第二课后作业第五八章朱金钧.docx_第4页
第4页 / 共92页
微机原理第二课后作业第五八章朱金钧.docx_第5页
第5页 / 共92页
点击查看更多>>
下载资源
资源描述

微机原理第二课后作业第五八章朱金钧.docx

《微机原理第二课后作业第五八章朱金钧.docx》由会员分享,可在线阅读,更多相关《微机原理第二课后作业第五八章朱金钧.docx(92页珍藏版)》请在冰豆网上搜索。

微机原理第二课后作业第五八章朱金钧.docx

微机原理第二课后作业第五八章朱金钧

第5章汇编语言程序设计

教材习题解答

1.下列语句在存储器中分别为变量分配多少字节?

 

VR1

DW

9

VR2

DW

4DUP(?

>

CONTEQU

10

VR3

DD

CONTDUP(?

>

VR4

DB

2DUP(?

,CONTDUP(0>>

VR5

DB

‘HOWAREYO?

U'

【解】VR1:

2B;

VR2:

8B

;CONT:

1B;VR3:

40B;

12Bkg3K2HUCPIb5E2RGbCAP

VR4:

2.根据下列数据定义,写出各条指令执行后的结果

VR5:

 

【解】(1>AX=1(2>BX=2

DI=4aFxXOOD8Gfp1EanqFDPw

TABLEDW100DUP(?

>

ARRAYDB‘ABCD'

RESDB?

(1>

MOVAX,TYPERES

AX=<

(2>

MOVBX,TYPETABLE

BX=<

(3>

MOVCX,LENGTHTABLE

CX=<

(4>

MOVSI,SIZETABLE

SI=<

(5>

MOVDI,LENGTHARRAYDI=<

(3>CX=100(4>SI=200(5>

3.下面定义的是一个数据段,请图示它们在存储器中的存放形式。

DATASEGMENT

A

DB

1,2,3,4

B

DB

‘ABCD'

C

DB

4DUP(0>

N

EQU

12

X

DW

33,0302H

Y

DD

0ABCDH

DATAENDS

4.

【解】注:

括号中为段内偏移地址

(0000H>

A

1

(0008H>C

0

(0011H>

Y

03H

2

0

0CDH

3

0

0ABH

4

0

00H

(0004H>

B

A

(000CH>N

12

00H

B

(000DH>X

17H

C

00H

D

02H

试定义一个完整的数据段,首先将

10个压缩的BCD码29存放在ARRA^量字节

单元,紧接着把-28,6,45,39,3存放在ALPHA数组变量的字单元中,最后从字节变

量BUFFER^元开始预留100个空单元备用。

aFxXOOD8GfDXDiTa9E3d

【解】

DATASEGMENT

ARRAYDB10DUP(29H>

ALPHADW-28,6,45,39,3

BUFFERDB100DUP(?

>

DATAENDS

5.请定义一个结构,描述一个学生的简况。

该结构应含有以下内容:

姓名、年龄、性别、籍贯、民族、入学成绩、名次。

说明如何定义结构变量和引用结构变量。

aFxXOOD8GfRTCrpUDGiT

【解】

STUDENSTRUC

NAMEDW5DUP(?

>

AGEDB(?

>

SEXDW(?

>

HOMEPLAW10DUP(?

>

RACEDW5DUP(?

>

GRADEDB(?

>

SORTDB(?

>

STUDENTENDS

定义结构变量的格式:

结构变量名结构名〈字段值表〉

例如:

STU1STUDENT〈1,‘ZHANG'〉引用结构变量的格式:

结构变量名.结构字段名,例如:

STU1.NAME

6.实现满足下面要求的宏定义。

(1>任意两个单元中的数据相加存于第三个单元中。

(2>任意8位寄存器中的数据转换为ASCII码并在屏幕上显示。

【解】(1>宏定义的代码段如下:

ADDMMACROM1,M2,M3

MOVAX,[M1]

ADDAX,[M2]

MOV[M3],AX

ENDM

(2>设8位寄存器存储的是无符号数,最高位是百位。

宏定义的代码段如下:

ADDMMACROY

;形式参数Y代表一个8位寄存器

MOV

AL

,Y

XOR

AH

,AH

MOV

DL

,100

DIV

DL

ADD

AL

,30H

MOV

DL

,AL

MOV

AL

,AH

;存余数

MOV

AH

,2

INT

21H

;显示百位数

XOR

AH

,AH

MOV

DL

,10

DIV

DL

ADD

AL

,30H

MOV

DL

,AL

MOV

AL

,AH

;存余数

MOV

AH

,2

INT

21H

;显示十位数

ADD

AL,

30H

MOVDL,AL

MOVAH,2

;显示个位数

INT21H

ENDM

7.对下面程序进行注释,并说明其功能

DATA

SEGMENT

A

DB‘123ABC'

DATA

ENDS

CODE

SEGMENT

ASSUMECS:

CODE,DS:

DATA

XCHGAL,DL

INCBX

INT21H

LOOPLP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

解】注释如下:

DATASEGMENT;数据段开始

ADB‘123ABC'

DATAENDS;数据段结束

CODESEGMENT;代码段开始

ASSUMECS:

CODE,DS:

DATA

START:

MOV

AX,DATA

MOV

DS,AX

;装填数据段

LEA

BX,A

;传送变量的地址

MOV

CX,6

MOV

AH,2

LP:

MOV

AL,[BX]

XCHG

AL,DL

INCBX

INT21H

B”、“C'送屏幕显示

LOOPLP

;CX=6,循环6次

MOV

AH,4CH

INT

21H

;返回DOS

CODEENDS

;代码段结束

END

START

;源程序结束

程序的功能:

显示从

A开始的

6个字节单元中的字符。

;将字符1、2、3、“A

;系统功能调用,功能号:

2,

8.编程将CXDX作为双字联合右移四位<设CX为高16位),最高4位送入全1。

解】程序代码如下:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAX,CX

MOVCX,4

LP:

SHRAX,1

RCRDX,1LOOPLP

ORAX,0F000H

MOVCX,AX

MOVAH,4CHINT21H

CODEENDS

ENDSTART

;代码段开始

;返回DOS

;代码段结束

;源程序结束

9.编程把从A单元开始存放的3个单字节无符号数按递增顺序排序后存回原处

解】程序代码如下:

DATASEGMENT

;数据段开始

ADB3DUP(?

>

DATAENDS;数据段结束

CODESEGMENT;代码段开始

ASSUMECS:

CODE,DS:

DATA

START:

MOV

AX,DATA

MOV

DS,

AX

;装填数据段

LEA

BX,

A

;传送变量的地址

MOV

AL,

[BX]

 

CMPAL,[BX+1]

JAEEX1

CMP2:

CMPAL,

[BX+2]

JAEEX2

;[BX]>[BX+2],交换

JMP

CONT1

EX1:

XCHGAL,

[BX+1]

XCHG

AL,[BX]

MOV

AL,[BX]

JMP

CMP2

EX2:

XCHGAL,

[BX+2]

XCHG

AL,[BX]

MOV

AL,[BX]

CONT1:

MOV

AL,[BX+1]

CMP

AL,[BX+2]

JB

CONT2

XCHG

AL,[BX+2]

;[BX+1]>[BX+2],交换

XCHG

AL,[BX+1]

CONT2:

MOV

AH,4CH

INT

21H

;返回DOS

CODE

ENDS

;代码段结束

END

START

;源程序结束

;[BX]>[BX+1],交换

10.试编写一段程序比较从ARRAYS始存放的3个16位有符号数。

根据比较结果置

FLAG标志。

(1>如果3个数都不相等,置FLAG为0。

(2>如果3个数中有2个数相等,置FLAG为1。

(3>如果3个数都相等,置FLAG为2。

【解】程序代码如下:

DATASEGMENT;数据段开始

ARRAYDW3DUP(?

>

FLAGDB?

DATAENDS;数据段结束

CODESEGMENT;代码段开始

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX;装填数据段

LEA

BX,ARRAY

;传送变量的地址

MOV

AX,[BX]

CMP

AX,[BX+2]

JE

EQU1

;[BX]

=[BX+2]

MOV

DL,0

JMP

CONT1

EQU1:

MOVDL

,1

CONT1:

CMPAX

,[BX+4]

JE

EQU2

;[BX]

=[BX+4]

JMP

CONT2

EQU2:

ADDDL

,1

CONT2:

MOV

AX,[BX+2]

CMP

AX,[BX+4]

JE

EQU3

JMP

CONT3

EQU3:

ADDDL

,1

CONT3:

CMP

DL,3

JNZ

EQU4

;[BX]

=[BX+2]

SUB

DL,1

EQU4:

MOVFLAG,DL

MOV

AH,4CH

INT

21H

;返回

DOS

CODE

ENDS

;代码段结束

END

START

;源程序结束

,执行MOVDL,1

,DL+1

=[BX+4],DL—1

ASSUMECS:

CODE,DS:

DATA

LOOPLP

MOVSUM,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

请问:

(1>该程序完成的功能是。

(2>程序执行后,SUM单元的内容是。

【解】

(1>该程序完成的功能是计算0〜20的偶数和。

(2>程序执行后,SUM单元的内容是110。

12.从ARRAYS始的单元中存有10个16位无符号数,试编一完整程序找出其中最小

数并存入MIN单元。

aFxXOOD8Gf5PCzVD7HxA

【解】程序代码如下:

DATA

SEGMENT

;数据段开始

ARRAY

DW0F454H,

4540H,0D214H,8354H,8210H,

0A673H,5656H,0021H,0567H,4228H

MIN

DW?

DATA

ENDS

;数据段结束

CODE

SEGMENT

;代码段开始

 

ASSUMECS:

CODE,DS:

DATA

START:

MOV

AX,DATA

MOV

DS,AX

;装填数据段

LEA

BX,ARRAY

;传送变量的地址

MOV

AX,[BX]

MOV

CX,9

LP1:

INC

BX

INC

BX

CMP

AX,[BX]

JBCONT1

;AX<[BX],转移

MOV

AX,[BX]

;AX>=[BX],AX

CONT1:

LOOPLP1

MOVMIN,AX

MOVAH,4CH

;返回DOS

;代码段结束

;源程序结束

INT21H

CODEENDS

ENDSTART

13.从DAT开始的数据区中放有100个8位的无符号数,编程统计其中奇数的个数,

将结果存入RESULT单元。

aFxX00D8GfjLBHrnAILg

解】程序代码如下:

DATASEGMENT;数据段开始

DATDB26,45,44,32,90,2,1,81,2,120,5……

RESULTDB?

DATAENDS;数据段结束

C0DESEGMENT;代码段开始

ASSUMECS:

C0DE,DS:

DATA

START:

MOV

AX,DATA

MOV

DS,AX

;装填数据段

LEA

BX,DAT

;传送变量的地址

XOR

AX,AX

XOR

DX,DX

MOV

DL,2

MOV

CX,100

LP1:

MOV

AL,[BX]

DIV

DL

;余数在AH中

CMPAH,0

JEC0NT1

INCDH

;DH用作计数器

CONT1:

INC

BX

LOOP

LP1

MOV

RESULT,DH

MOV

AH,4CH

INT

21H

;返回DOS

CODE

ENDS

;代码段结束

END

START

;源程序结束

14.利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入“$”字符时停止输出。

aFxX00D8GfxHAQX74J0X

【解】调用1号系统功能,键入的字符送AL寄存器,并送屏幕显示输出。

调用2号系

统功能,将DL寄存器中的内容送屏幕显示输出。

程序代码如下:

aFxXOOD8GfLDAYtRyKfE

;代码段开始

CODESEGMENT

ASSUMECS:

CODE

START:

XORAX,AX

INPU:

MOVAH,1

INT

21H

;键盘输入单字符送AL

MOV

BL,

‘$'

CMP

AL,

BL

JE

EXT

SUB

AL,

20H

;转换成大写字母

MOV

DL,

AL

MOV

AH,

2

INT

21H

;将DL中的字符送屏幕显示

JMP

INPU

EXT:

MOV

AH,

4CH

INT

21H

;返回DOS

CODE

ENDS

;代码段结束

;源程序结束

ENDSTART

15.建立两个过程:

一个过程将16进制数变换成ASCII码,一个过程将ASCII码字

符在屏幕上显示输出。

aFxXOOD8GfZzz6ZB2Ltk

解】程序代码如下:

DATA

SEGMENT

;数据段开始

LIST

DB

;存储一个十六进制数(1位>

ASC

DB

;存储转换的ASCII码

DATA

ENDS

;数据段结束

CODE

SEGMENT

;代码段开始

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOV

AX,DATA

MOV

DS,AX

;装填数据段

CALL

CHANGE

CALL

OUTPTR

MOV

AH,4CH

INT

21H

;返回DOS

CHANGEPROC

 

MOV

AL,LIST

CMP

AL,

9

JA

NEXT1

;AL>9,转移

OR

AL,

30H

JMPNEXT2

NEXT1:

ADDAL,37H

NEXT2:

MOVASC,AL

RET

CHANGEENDP

OUTPTRPROC

MOVDL,ASC

MOVAH,2

INT21H

RET

OUTPTRENDP

CODEENDS;代码段结束

ENDSTART;源程序结束

16.要求编写程序比较两个最大长度为100个字符的字符串ALFA1和ALFA2是否相等,若相等则输出显示“AllRight!

”,否则输出显示“Error!

”。

aFxXOOD8GfdvzfvkwMI1

【解】完成输出显示功能时,调用9号系统功能,功能是将指定的内存缓冲区中的字符串在屏幕上显示出来,缓冲区的字符串以“$”为结束标志。

aFxXOOD8Gfrqyn14ZNXI

LEN指定的内存中存储两字符串中长串的长度,否则,即使两串相等,由于字符

串后面的随机字符,将影响判断结果。

aFxXOOD8GfEmxvxOtOco

程序代码如下:

DATA

SEGMENT

;数据段开始

ALFA1

DB

100DUP(?

>

ALFA2

DB

100DUP(?

>

RESULT1DB‘AllRight!

$'

RESULT2DB‘Error!

$'

LEN

DB100

;字符串长度

DATA

ENDS

;数据段结束

CODE

SEGMENT

;代码段开始

ASSUMECS:

CODE,

DS:

DATA,ES:

DATA

START:

MOV

AX,DATA

MOV

DS,AX

;装填数据段

MOV

ES,AX

;装填附加段

LEA

BX,ALFA1

;传送源串的地址

MOV

SI,BX

LEA

BX,ALFA2

;传送目的串的地址

MOV

DI,BX

XOR

CX,CX

MOV

CL,LEN

REPNZCMPSB

JZ

EQQ

;若ZF=1,说明两串相等,转EQQ

LEA

DX,RESULT2

;输出显示“Error!

JMP

OUT1

EQQ:

LEADX

,RESULT1

;输出显示“AllRight!

OUT1:

MOVAH,9

INT

21H

STOP:

MOV

AH,4CH

INT

21H

;返回DOS

CODE

ENDS

;代码段结束

END

START

;源程序结束

CLD

;清方向标志,使正向传送

17.有一个最大长度为80个字符的字符串STRING试编写程序找出第一个空格的位置<用00H-4FH表示),并存入CL中。

若该串无空格,则将OFFH存入CL中。

aFxXOOD8GfSixE2yXPq5

【解】程序代码如下:

DATA

SEGMENT

;数据段开始

STRING

DB

80DUP(?

LENDB80

DATA

ENDS

;数据段结束

CODE

SEGMENT

;代码段开始

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOV

AX,DATA

MOV

DS,AX

;装填数据段

MOV

ES,AX

;装填附加段

MOV

AL,‘'

;要查找的关键字<空格)

LEA

BX,STRING

;传送串的地址

MOV

DI,BX

XOR

CX,CX

MOV

CL,LEN

CLD

;清方向标志,使正向传送

REPNZSCASB

;搜索关键字

JZFOUND

;若ZF=1,说明找到,转FOUND

MOV

CL,0FFH

JMP

STOP

FOUND:

MOVAL

,LEN

SUBAL,CLMOVCL,AL

;CL中是剩余的字符数

STOP:

MOV

AH,4CH

INT

21H

;返回DOS

CODE

ENDS

;代码段结束

END

START

;源程序结束

18.在AX中存放着压缩BCD码的十进制数。

要求:

(1>将AH中的数转换成二进制数。

(2>求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。

CODESEGMENT

ASSUMECS:

CODE

START:

MOVBX,AX

ANDAH,0FH

MOVAL,AH

MUL100

MOVDX,AX

MOVAH,BH

MOVCL,4

SHRAH,CL

MOVAL,AH

MUL1000

ADDAX,DX

;百位加千位结果存于DX中

;返回DOS

;代码段结束

;源程序结束

ASCII码,然后在屏幕上显示出来。

;代码段开始

;保存AX中的数据

;移位次数

MOVDX,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(2>求AH与AL中数的和,将结果转换成

序代码如下:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVBX,AX

MOVCL,4

SHRAH,CL

;千位移到AH低4位

ADDAH,30H

;转换成ASCII码

MOVDL,AH

MOVAH,2

INT21H

;调用2号系统功能,输出单字符

MOVAH,BH

ANDAH,0FH

;取低4位

ADDAH,30H

;转换成ASCII码

MOVDL,AH

MOVAH,2

INT21H

;调用2号系统功能,输出单字符

MOVAL,BL

MOVCL,4

;移位次数

SHRAL,CL

;十位移到低4位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1