1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx

上传人:b****7 文档编号:22394822 上传时间:2023-02-03 格式:DOCX 页数:51 大小:135.63KB
下载 相关 举报
1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx_第1页
第1页 / 共51页
1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx_第2页
第2页 / 共51页
1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx_第3页
第3页 / 共51页
1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx_第4页
第4页 / 共51页
1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx

《1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx》由会员分享,可在线阅读,更多相关《1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx(51页珍藏版)》请在冰豆网上搜索。

1632位微机原理汇编语言及接口技术第2版习题答案文档格式.docx

(2)、码—用来指代某个事物或事物的某种状态属性,包括:

二进制、八进制、十进制、十六进制。

区别:

使用场合不同,详见P16.

1.11解:

(1)

(2)

(3)

1.12解:

原码反码补码

+3700100101/25H00100101/25H00100101/25H

-3710100101/A5H11011010/DAH11011011/DBH

1.13解:

+37

-37

16位

32位

0025H

00000025H

FF5BH

FFFFFF5BH

1.14解:

无符号数:

70D

补码有符号数:

BCD码:

46D

ASCII:

F

1.15解:

1)、相加后若出现和大于9,则将和减去10后再向高位进1

2)、若出现组间进位,则将低位加6

1.16解:

详见课本16页。

1.17解:

C3402000

1.18解:

50

50H

十进制值

80

二进制

十六进制

00110010B

32H

01010000B

1.19解:

D:

44H

d:

64H

CR:

0DH

LF:

0AH

0:

30H

SP:

20H

NUL:

00H

1.20解:

国标码:

3650H

机内码:

B6B0H

第二章

2.1

算术逻辑单元ALU、寄存器组和控制器;

总线接口单元BIU:

管理8088与系统总线的接口负责cpu对接口和外设进行访问

执行单元EU:

负责指令译码、执行和数据运算;

8位cpu在指令译码前必须等待取指令操作的完成,8088中需要译码的指令已经取到了指令队列,不需要等待取指令。

而取指令是cpu最为频繁的操作,因此8088的结构和操作方式节省了大量等待时间,比8位cpu节省了时间,提高了性能。

2.2

8个8位寄存器:

AH、AL、BH、BL、CH、CL、DH、DL;

8个16位寄存器:

累加器AX、基址寄存器BX、计数器CX、数据寄存器DX、源地址寄存器SI、目的地址寄存器DI、基址指针BP、堆栈指针SP。

2.3

标志用于反映指令执行结果或者控制指令执行形式。

状态标志用于记录程序运行结果的状态信息;

控制标志用于控制指令执行的形式。

2.4

例:

有运算:

3AH+7CH=B6H

作为无符号数运算,没有进位,CF=0;

作为有符号数运算,结果超出范围,OF=1.

2.5

8088中每个存储单元有唯一的20位地址,称为物理地址。

处理器通过总线存取存储器数据时,采用这个物理地址。

在用户编程过程中采用的“段地址:

偏移地址”的形式称为逻辑地址。

将逻辑地址中的段地址左移4位,加上偏移地址就得到物理地址。

1MB最多能分成65536个逻辑段。

2.6

代码段:

存放程序的指令序列;

堆栈段:

确定堆栈所在的主存储区;

数据段:

存放当前运行程序的数据;

附加段:

附加数据段,用于数据保存。

另外串操作指令将其作为目的操作数的存放区。

2.7

8088的存储空间分段管理,程序设计时采用逻辑地址。

由于段地址在默认的或指定的段寄存器中,所以只需要偏移地址,称为有效地址EA.

操作数在主存中有以下几种寻址方式:

直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址。

2.8

(1)立即数寻址ax:

1200H

(2)寄存器寻址ax:

0100H

(3)存储器直接寻址ax:

4C2AH

(4)寄存器间接寻址ax:

3412H

(5)寄存器间接寻址ax:

(6)基址变址寻址ax:

7856H

(7)相对基址变址寻址ax:

65B7H

2.9

(1)cx为字寄存器,dl为字节寄存器,类型不匹配。

(2)mov指令的目的操作数只能是寄存器或者主存单元,ip是指针。

(3)不允许立即数到段寄存器的传送。

(4)不允许段寄存器之间的直接传送。

(5)数据溢出。

(6)sp不能用于寄存器间接寻址。

(7)格式不对。

应为:

movax,[bx+di]

(8)mov指令的操作数不能是立即数。

2.10

(1)bx得到table的偏移地址,bx=200H.

(2)将立即数8送到al。

(3)换码,al=12H.

2.11

(1)al=89H

(2)al=12H,cf=1,zf=0,sf=0,of=1,pf=1

(3)al=0AFH,cf=0,zf=0,sf=1,of=0,pf=1

(4)al=0AFH,cf=1,zf=0,sf=1,of=1,pf=1

(5)al=0,cf=0,zf=1,sf=0,of=0,pf=1

(6)al=0FFH,cf=0,zf=0,sf=1,of=0,pf=1

(7)al=0,cf=0,zf=1,sf=0,of=0,pf=1

2.12

(1)adddx,bx

(2)addal,[bx+si]

(3)addwordptr[bx+0B2H],cx

(4)addwordptr[0520H],3412H

(5)addal,0A0H

2.13

运算公式:

商存储在ax,余数存储在dx。

2.14

(1)ax=1470H

(2)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0

(3)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0

(4)ax=0,cf=0,of=0,sf=0,zf=1,pf=1

(5)ax=0FFFFH,cf=0,of=0,sf=0,zf=1,pf=1

(6)ax=0FFFFH,cf=0,of=0,sf=1,zf=0,pf=1

2.15

相对寻址方式、直接寻址方式、间接寻址方式。

2.16

(1)1256H

(2)3280H

2.17

(1)ax=1E1EH

(2)al的D0、D7位不全为0

(3)cx<

2.18

执行65536次。

2.19

功能:

将数组中每个字元素相加,结果存储于total。

2.20

(1)leasi,string

Movdh,[si]

Movdl,[si+5]

(2)movaxwordptrbuffer1

Subaxwordptrbuffer2

Movdxwordptrbuffer1+2

Sbbdxwordptrbuffer2+2

(3)testdx,0F000H

jzeven

even:

movax,0

(4)movcx,4

again:

sardx,1

rcrax,1

loopagain

(5)movcx,100

movsi,0

moval,0FFH

addal,array[si]

movarray[si],al

incsi

2.21

Htoascproc

Movbl,al

Moval,ah

Movbh,10

Mulbh

Andax,00FFH

Addal,bl

Htoend:

ret

Htoascendp

2.22

计算机系统利用中断为用户提供硬件设备驱动程序。

在IBM-PC系列微机中,基本输入输出系统ROM-BIOS和DOS都提供了丰富的中断服务程序,称为系统功能调用。

调用步骤

(1)AH中设置系统功能调用号

(2)在指定寄存器中设置入口参数

(3)使用中断调用指令执行功能调用

(4)根据出口参数分析调用情况

2.23

Andal,0FH

Addal,90H

Daa

Adcal,40H

Movah,02H

Movdl,al

Int21H

Ret

2.24

Numoutproc

Xorah,ah

Aam

Addax,3030H

Movdl,ah

Int31H

Numoutendp

2.25

Msgkeydb”inputnumber0-9”,”$”

Msgwrgdb”error”,”$”

Movah,09H

Movdx,offsetmsgkey

Again:

movah,01H

Cmpal,30H

Jbdisp

Cmpal,39H

Jadisp

Jmpdone

Disp:

movdx,offsetmsgwrg

Jmpagain

Done:

movah,02H

第3章

3.1解:

汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序

3.2解:

(1)完整的汇编语言源程序由段组成

(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列

(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点

(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内

(5)通常,程序还需要一个堆栈段

3.3解:

存储模式

特点

TINY

COM类型程序,只有一个小于64KB的逻辑段(MASM6.x支持)

SMALL

小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于64KB

COMPACT

代码少、数据多的程序,只有一个代码段,但有多个数据段

MEDIUM

代码多、数据少的程序,可有多个代码段,只有一个数据段

LARGE

大应用程序,可有多个代码段和多个数据段(静态数据小于64KB)

HUGE

更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)

FLAT

32位应用程序,运行在32位80x86CPU和Windows9x或NT环境

3.4解:

开始位置:

用标号指明

返回DOS:

利用DOS功能调用的4CH子功能来实现

汇编停止:

执行到一条END伪指令时,停止汇编

3.5解:

段定位、段组合和段类型。

3.6解:

stacksegmentstack

db1024(0)

stackends

datasegment

stringdb'

Hello,Assembly!

'

,0dH,0aH,‘$’

dataends

codesegment'

code'

assumecs:

code,ds:

data,ss:

stack

start:

movdx,offsetstring

movah,9

int21h

codeends

endstart

3.7解:

(1).EXE程序

程序可以有多个代码段和多个数据段,程序长度可以超过64KB

通常生成EXE结构的可执行程序

(2).COM程序

只有一个逻辑段,程序长度不超过64KB

需要满足一定条件才能生成COM结构的可执行程序(MASM6.x需要采用TINY模式)

3.8解:

符号定义伪指令有“等价EQU”和“等号=”:

符号名EQU数值表达式

符号名EQU<

字符串>

符号名=数值表达式

EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。

例如:

X=7;

等效于:

Xequ7

X=X+5;

“XEQUX+5”是错误的

3.9解:

(1)al=67h

(2)ax=133h,dx=4h

(3)ax=0230h

(4)al=41h

(4)ax=7654h

3.10解:

(1)

41h

42h

43h

10

10h

45h

46h

-1

?

4

00h

0fbh

0ffh

3.11解:

.data

my1bdb'

PersonalComputer'

my2bdb20

my3bdb14h

my4bdb00010100b

my5wdw20dup(?

my6c=100

my7c=<

>

3.12解:

利用定位伪指令控制,如org,even,align

3.13解:

包括逻辑地址和类型两种属性。

3.14解:

数据段

org100h

varwdw1234h,5678h

varbdb3,4

varddd12345678h

buffdd10dup(?

messdb'

Hello'

代码段

movax,offsetvarb+offsetmess

movax,typebuff+typemess+typevard

movax,sizeofvarw+sizeofbuff+sizeofmess

movax,lengthofvarw+lengthofvard

3.15解:

(1)1000超过一个字节所能表达的最大整数

(2)SI应为偶数

(3)两个内存单元不能直接运算

(4)应改为[al+1]

(5)条件转移指令后面应接标号,而不是变量

3.16解:

movah,1;

只允许输入小写字母

int21h

subal,20h;

转换为大写字母

movdl,al

movah,2

int21h;

显示

3.17解:

movbx,offsetLEDtable

moval,lednum

xlat

3.18解:

movax,bufX

cmpax,bufY

jaedone

movax,bufY

done:

movbufZ,ax

3.19解:

.modelsmall

.stack

.data

bufXdw-7

signXdb?

.code

.startup

cmpbufX,0;

testbufX,80h

jlnext;

jnznext

movsignX,0

jmpdone

next:

movsignX,-1

.exit0

end

3.20解:

movdl,’2’

movax,bufX

cmpax,bufY

jenext1

decdl

next1:

cmpax,bufZ

jenext2

next2:

3.21解:

;

moval,number

movbx,0;

BX←记录为1的位数

restart:

cmpal,0;

AL=0结束

jzdone

shral,1;

最低位右移进入CF

jcnext;

为1,转移

incbx;

不为1,继续

jmpagain

pushax

pushbx

shlbx,1;

位数乘以2(偏移地址要用2个字节单元)

jmpaddrs[bx];

间接转移:

IP←[table+BX]

以下是各个处理程序段

fun0:

movdl,'

0'

jmpdisp

fun1:

1'

fun2:

2'

fun3:

3'

fun4:

4'

fun5:

5'

fun6:

6'

fun7:

7'

disp:

movah,2;

显示一个字符

popbx

popax

jmprestart

3.22编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。

wjxt322.asm

b_datadb12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;

原始数据

numequ10;

数据个数

sumdb?

预留结果单元

xorsi,si;

位移量清零

xoral,al;

取第一个数

movcx,num;

累加次数

addal,b_data[si];

累加

incsi;

指向下一个数

loopagain;

如未完,继续累加

movsum,al;

完了,存结果

3.23求主存0040h:

0开始的一个64KB物理段中共有多少个空格?

;

wjxt323.asm

start:

movax,0040h;

送段地址

movds,ax

movsi,0;

偏移地址

movcx,si;

计数(循环次数)

xorax,ax;

空格计数器清零

cmpbyteptr[si],20h;

与空格的ASCII码比较

jnenext;

不是空格,转

incax;

是空格,空格数加1

修改地址指针

cx=cx-1,如cx=0退出循环

endstart

3.24编写计算100个16位正整数之和的程序。

如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘overflow’。

答:

countequ100

parraydwcountdup(?

);

假设有100个数据

wordsumdw0

msgdb‘overflow’,’$’

movcx,count

movbx,offsetparray

addax,[bx]

jncnext

movdx,offsetmsg

movah,9

显示溢出信息

jmpdone;

然后,跳出循环体

addbx,2

movwordsum,ax

3.25编程把—个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。

转换算法可以是:

用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;

依次用余数除以l00、10和l,得到“百位”、“十位”和“个位”。

wjxt325.asm

.modelsmall

.stack256

.data

arraydw?

源字数据

dbcddb5dup(?

五位bcd结果,高对高低对低

.code

.startup

movdx,array;

取源数据(余数)

movbx,10000;

除数

movcx,10;

除数系数

movsi,4;

目的数据高位位移量

movax,dx;

dx.ax

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

当前位置:首页 > 经管营销 > 销售营销

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

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