微机原理与接口技术第二版课后习题答案,龚尚福版_第1页
微机原理与接口技术第二版课后习题答案,龚尚福版_第2页
微机原理与接口技术第二版课后习题答案,龚尚福版_第3页
微机原理与接口技术第二版课后习题答案,龚尚福版_第4页
微机原理与接口技术第二版课后习题答案,龚尚福版_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机原理与接口技术部分答案第二版主编:龚尚福2.2 8086微处理器由哪几部分组成?各部分的功能是什么?16355 【解】:按功能可分为两部分:总线接口单元biu(bus interface unit)和执行单元eu(execution unit)。总线接口单元biu是8086 cpu在存储器和i/o设备之间的接口部件,负责对全部引脚的操作,即8086对存储器和i/o设备的所有操作都是由biu完成的。所有对外部总线的操作都必须有正确的地址和适当的控制信号,biu中的各部件主要是围绕这个目标设计的。它提供了16位双向数据总线、20位地址总线和若干条控制总线。 其具体任务是:负责从内存单元中预取指

2、令,并将它们送到指令队列缓冲器暂存。cpu执行指令时,总线接口单元要配合执行单元,从指定的内存单元或i/o端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或i/o端口中。执行单元eu中包含1个16位的运算器alu、8个16位的寄存器、1个16位标志寄存器fr、1个运算暂存器和执行单元的控制电路。这个单元进行所有指令的解释和执行,同时管理上述有关的寄存器。eu对指令的执行是从取指令操作码开始的,它从总线接口单元的指令队列缓冲器中每次取一个字节。如果指令队列缓冲器中是空的,那么eu就要等待biu通过外部总线从存储器中取得指令并送到eu,通过译码电路分析,发出相应控制命令,

3、控制alu数据总线中数据的流向。2.3 简述8086 cpu的寄存器组织。【解】:(1)通用寄存器:通用寄存器又称数据寄存器,既可作为16位数据寄存器使用,也可作为两个8位数据寄存器使用。当用作16位时,称为ax、bx、cx、dx。当用作8位时,ah、bh、ch、dh存放高字节,al、bl、cl、dl存放低字节,并且可独立寻址。这样,4个16位寄存器就可当作8个8位寄存器来使用。(2)段寄存器:段寄存器共有4个cs、ds、ss、es。代码段寄存器cs表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由ip提供;堆栈段寄存器ss指定当前堆栈的起始地址;数据段寄存器ds指示

4、当前程序使用的数据所存放段的起始地址;附加段寄存器es则指出当前程序使用附加段地址的起始位置,该段一般用来存放原始数据或运算结果。 (3)指针和变址寄存器:堆栈指针sp用以指出在堆栈段中当前栈顶的地址。入栈(push)和出栈(pop)指令由sp给出栈顶的偏移地址。基址指针bp指出要处理的数据在堆栈段中的基地址,故称为基址指针寄存器。变址寄存器si和di用来存放当前数据段中某个单元的偏移量。(4)指令指针与标志寄存器:指令指针ip的功能跟z80 cpu中的程序计数器pc的功能类似。正常运行时,ip中存放的是biu要取的下一条指令的偏移地址。它具有自动加1功能,每当执行一次取指令操作时,它将自动加

5、1,使它指向要取的下一内存单元,每取一个字节后ip内容加1,而取一个字后ip内容则加2。某些指令可使ip值改变,某些指令还可使ip值压入堆栈或从堆栈中弹出。标志寄存器flags是16位的寄存器,8086共使用了9个有效位,标志寄存器格式如图2.5所示。其中的6位是状态标志位,3位为控制标志位。状态标志位是当一些指令执行后,表征所产生数据的一些特征。而控制标志位则可以由程序写入,以达到控制处理机状态或程序执行方式的表征。2.4 试述8086 cpu标志寄存器各位的含义与作用。【解】:(1) 6个状态标志位的功能分别叙述如下: cf(carry flag)进位标志位。当执行一个加法(或减法)运算,

6、使最高位产生进位(或借位)时,cf为1;否则为0。 pf(parity flag)奇偶标志位。该标志位反映运算结果中1的个数是偶数还是奇数。当指令执行结果的低8位中含有偶数个1时,pf=1;否则pf=0。 af(auxiliary carry flag)辅助进位标志位。当执行一个加法(或减法)运算,使结果的低4位向高4位有进位(或借位)时,af=1;否则af=0。zf(zero flag)零标志位。若当前的运算结果为零,zf=1;否则zf=0。sf(sign flag)符号标志位。它和运算结果的最高位相同。of(overflow flag)溢出标志位。当补码运算有溢出时,of=1;否则of=0

7、。(2) 3个控制标志位用来控制cpu的操作,由指令进行置位和复位。df(direction flag)方向标志位。它用以指定字符串处理时的方向,当该位置“1”时,字符串以递减顺序处理,即地址以从高到低顺序递减。反之,则以递增顺序处理。if(interrupt enable flag)中断允许标志位。它用来控制8086是否允许接收外部中断请求。若if=1,8086能响应外部中断,反之则不响应外部中断。注意:if的状态不影响非屏蔽中断请求(nmi)和cpu内部中断请求。tf(trap flag)跟踪标志位。它是为调试程序而设定的陷阱控制位。当该位置“1”时,8086 cpu处于单步状态,此时cp

8、u每执行完一条指令就自动产生一次内部中断。当该位复位后,cpu恢复正常工作。2.5 8086中,存储器为什么采用分段管理? 【解】:8086/8088的地址总线宽度为20位,其最大寻址空间是1mb。而其他微处理器则在实模式下只能访问前1 mb的存储器地址。实际上,实模式就是为8086/8088而设计的工作方式,它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。每个段的大小可达64kb,这样段内地址可以用16位表示。存储器分段的方法虽然给程序设计带来一定的麻烦,但这种方法可以扩大存储

9、空间,而且对于程序的再定位也是很方便的。2.6 什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?【解】:物理地址:完成存储器单元或i/o端口寻址的实际地址成为物理地址,cpu型号不同其物理地址也不同。物理地址是指cpu和存储器进行数据交换时实际所使用的地址,而逻辑地址是程序使用的地址。物理地址由两部分组成:段基址(段起始地址高16位)和偏移地址。前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。当cpu寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址。在取指令时,cpu自动选择代码段寄存器cs,左移4位后,加

10、上指令提供的16位偏移地址,计算出要取指令的物理地址。堆栈操作时,cpu自动选择堆栈段寄存器ss,将其内容左移4位后,加上指令提供的16位偏移地址,计算出栈顶单元的物理地址。每当存取操作数时,cpu会自动选择数据段寄存器(或附加段寄存器es),将段基值左移4位后加上16位偏移地址,得到操作数在内存的物理地址。2.9 在80x86微机的输入/输出指令中,i/o端号通常是由dx寄存器提供的,但有时也可以在指令中直接指定00h0ffh的端口号。试问可直接由指令指定的i/o端口数是多少?【解】:由于在80x86的输入/输出指令中,可以直接在00h0ffh指定,所以直接由指令指定的i/o端口数是256。

11、3.1 指令分成几部分?每部分的作用是什么?【解】:每条指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说明该指令所要完成的操作。 地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。3.2 指出下列mov指令的源操作数的寻址方式:movax,1234hmovax,bxmovax,bxmovax,table;table ;table是一个变量名movax,1234hmovax,bx+1234hmovax,bpsimovax,bx+si-1234h【解】:movax,1234h 立即寻址mova

12、x,bx 寄存器寻址movax,bx 寄存器间接寻址movax,table ;table是一个变量名 直接寻址方式movax,1234h 直接寻址方式movax,bx+1234h 寄存器相对寻址movax,bpsi 基址变址寻址movax,bx+si1234h 相对地址变址寻址3.3 设:(ds)=2000h,(bx)=0100h,(ss)=1000h,(bp)=0010h,table的物理地址为2000ah,(si)=0002h。求下列每条指令源操作数的存储单元地址:movax,1234hmovax,bxmovax,tablebxmovax,bpmovax,bpsi【解】: 存储单元地址:(

13、ds)×10h + ea =2000h×10h+1234h=21234h存储单元地址:(ds)×10h +(bx)=2000h×10h+0100h=20100h存储单元地址:(ds)×10h+ea=2000h×10h+0100h+000ah=2010ah存储单元地址:(ss)×10h+ea=1000h×10h+0010h=10010h储单元地址:(ss)×10h+ea=1000h×10h+0010h+0002h =10012h3.4 设array是字数组的首地址,写出将第5个字元素取出送ax寄存

14、器的指令,要求使用以下几种寻址方式: 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址【解】:(1)直接寻址(2)寄存器间接寻址(3)寄存器相对寻址(4)基址变址寻址 mov ax, array+8 mov bx, array+8 mov bx, 8 lea bx, array mov ax, bx mov ax, arraybx mov si, 8 mov ax,bx+si3.5 设当前(cs)=2000h,(ip)=2000h,标号next定义在当前代码段偏移地址是0100h处,(ds)=1000h,(bx)=1000h,(11000h)=00h,(11001h)=30h,数据段定义

15、的字变量array的内容为1000h,试写出下列转移指令的目标转移地址 jmpnearptr jmpbx jmpwordptrarray【解】: jmpnearptr 此转移指令的目标转移地址为:20100h jmpbx 此转移指令的目标转移地址为:21000h jmpwordptrarray 此转移指令的目标转移地址为:23000h3.6 设当前(cs)=2000h,(ip)=2000h,标号next定义在3000h:1000h处。当前(ds)=1000h,(bx)=1000h,(11000h)=00h,(11001h)=03h,(11002h)=00h,(11003h)=30h,数据段定义

16、的字变量array的内容为0300h,(array+2)=3000h,试写出下列转移指令的目标转移地址: jmpfarptrnext jmpdwordarray【解】: jmpfarptrnext 此转移指令的目标转移地址为:31000h jmpdwordarray 此转移指令的目标转移地址为:30300h3.7 下列每组指令有何区别?(1)mov ax,1234h mov ax,1234h (2)mov ax,tablemov ax,table(3)mov ax,table leaax,talbe(4)mov ax,bx mov ax,bx【解】:(1)mov ax,1234h 将立即数12

17、34h送到寄存器ax中 mov ax,1234h 将存储区1234h中的内容送到寄存器ax中(2)mov ax,table 将标号table的地址送到寄存器ax中mov ax,table 将存储区table 中的内容送到寄存器ax中(3)mov ax,table 将标号table的地址送到寄存器ax中 lea ax,talbe 将标号table的地址送到寄存器ax中(4)mov ax,bx 寄存器寻址 mov ax,bx 寄存器间接寻址3.8 movcs,ax指令正确吗?【解】:movcs,ax指令不正确。因为cs是指令寄存器,由系统自动改变,不能由指令进行更改。3.9 写一指令序列,将345

18、6h装入ds寄存器。【解】:mov ax, 3456h mov ds, ax3.10 若正在访问堆栈中03600h单元,则ss和sp的值是多少?【解】:若正在访问堆栈中03600h单元,则ss和sp的值会有好多组合,其中可以有ss是0300h,sp是0600h。3.11 若(ss)=2000h,(sp)=000ah,先执行将字数据1234h和5678h压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及sp的内容变化过程示意图(标出存储单元的物理地址)。sp20006h78h【解】:物理地址(ss)×10hsp 20007h56h34hsp20008h 20008h 20009

19、h 2000ah12h34h12h 20009hsp2000ah 2000ah3.16 解释xlat指令是怎样转换al寄存器中的内容的。并编写一段程序用xlat指令将bcd码09转换成对应的ascii码,并将ascii码存入数据array中。【解】:xlat指令是将al的内容替换成存储单元中的一个数,往往用于代码转换。使用此指令前,先在数据段建立一个表格,表格首地址存入bx寄存器,欲取代码的表内位移量存入al寄存器中。xlat指令将(al)值扩展成16位,与(bx)相加形成一个段偏移地址,段地址取(ds),据此读出代码送入al寄存器。程序如下:table db 30h, 31h, , 39h

20、array db 1o dup(?) mov cl, 10 mov si, 0 mov bx, offset table mov al, al again: xlat mov si, al inc si inc al loop again3.17 若(ax)=0001h,(bx)=0ffffh,执行add ax,bx之后,标志位zf、sf、cf和of各是什么?【解】: (ax)= 0001h = 0000 0000 0000 0001 b + (bx)=0ffffh = 1111 1111 1111 1111 b (ax)= 0001h = 1 0000 0000 0000 0000 b 则:

21、zf=1、sf=0、cf=1、of=03.18 写一指令序列完成将ax寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变。【解】: or ax, 000fh (or ax, 0000 0000 0000 1111 b) and ax, 1fffh (and ax, 0001 1111 1111 1111 b) xor ax, 01c0h (xor ax, 0000 0001 1100 0000 b)3.19 试写出执行下列指令序列后ax寄存器的内容。执行 前(ax)=1234h。mov cl,7shl bx,cl【解】:(ax) = 1234h = 0001 0010 0011

22、 0100 b 执行后:(ax) = 0 0011 0100 0000 000 b = 0001 1010 0000 0000 b = 1a00h 4.1 假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? mov bp,al mov word_opbx+4*3di,sp mov word_op1,word_op2 mov ax,word_op1dx mov save word,ds mov sp,ss:data_wordbxsi mov bxsi,2 mov ax,word_op1+word_op2 mov ax,word_op1-word_o

23、p2+100 mov word_op1,word_op1-word_op2【解】: mov bp,al 两个操作数不匹配 mov word_opbx+4*3di,sp mov word_op1,word_op2两个内存单元之间不能直接传送数据 mov ax,word_op1dx mov save word,ds mov sp,ss:data_wordbxsi当基址为bx时,选取ds寄存器 mov bxsi,2 mov ax,word_op1+word_op2 mov ax,word_op1-word_op2+100 mov word_op1,word_op1-word_op24.2 假设var

24、1和var2为字变量,lab为标号,试指出下列指令的错误之处: add var1,var2 sub al,var1 jmp labsi jnz var1 jmp near lab【解】: add var1,var2add两个操作数不能同时为存储单元,mov ax, var1 add ax, var2 sub al,var1两个操作数不匹配sub ax, var1 jmp labsi lab与si不能相加jmp word ptr si jnz var1jnz后面应是标号,不应是变量jnz lab jmp near lab缺少ptr运算符jmp near ptr lab4.3 画图说明下列语句所分

25、配的存储空间及初始化的数据值。 byte_var db byte,12,-12h,3 dup(0,?,2 dup(1,2),?) word_var dw 5 dup(0,1,2),?,-5,'by','te',256hword_var00h00h01h00h02h00h00h00h01h00h02h00hbbyte_var41h【解】:(1) (2) 0y59h1e45ht54h120ch212hf4h30个字节00h0210101h02h2101h200h0202h101h202h101h02h2fbh5ffh54h00h56h00h45hbyte00h41h

26、59h00h02h101h000h202h101h2256h02h4.4 假设程序中的数据定义如下:partno dw ?pname db 16 dup(?)count dd ?plenth equ $-partno问plenth的值为多少?它表示什么意义?【解】:plenth的值为22,它表示数据的个数。4.5 有符号定义语句如下:buff db 1,2,3,123ebuff db 0l equ ebuff-buff问l的值是多少?【解】:plenth的值为6。4.6 假设程序中的数据定义如下:lname db 30 dup(?)address db 30 dup(?)city db 15

27、dup(?)code-list db 1,7,8,3,2 用一条mov指令将lname的偏移地址放入ax。 用一条指令将code_list的头两个字节的内容放入si。 写一条伪操作使code_lenght的值等于code_list域的实际长度。【解】: 用一条mov指令将lname的偏移地址放入ax。 mov ax, offset lanme 用一条指令将code_list的头两个字节的内容放入si。mov si, word ptr code_lsit 写一条伪操作使code_lenght的值等于code_list域的实际长度。 code_lenght equ city-code_list4.

28、7 试写出一个完整的数据段data_seg,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组data_list的头5个单元中。然后,写出完整的代码段,其功能为:把data_list中头5个数中的最大值和最小值分别存入max和min单元中。【解】:参考程序如下: data_seg segment db1 db 5 data_list db -1, 0, 2, 5, 4, 5 dup(?) count db 5 max db ? min db ? data_seg ends code_seg segment assume cs:code_seg, ds:data_seg star

29、t proc far push ds mov ax, 0 push ax mov ax, data_seg mov ds, ax lea bx, data_list mov cx, count-1 mov al, bx mov ah, bx+1 loop1: inc bx cmp ah, al jae loop1 xchg ah, al loop2 inc bx cmp ah, bx jae lis xchg ah, bx jmp lop2 lis: cmp al , bx jbe lop2 xchg al, bx loop2 mov max, ah mov min, al ret start

30、 endp code_seg ends end start4.10 给出等值语句如下:alphaequ100betaequ25gammaequ2下列表达式的值是多少? alpha*100+beta alphamodgamma+beta (alpha+2)*beta-2 (beta/3)mod 5 (alpha+3)*(beta mod gamma) alpha ge gamma beta and 7 gamma or 3【解】: alpha*100+beta100×1002510025 alphamodgamma+beta100/(252)19 (alpha+2)*beta-2 (1

31、00+2)*252548 (beta/3)mod 5(25/3) mod 53 (alpha+3)*(beta mod gamma) (100+3)*(25 mod 2)103 alpha ge gamma 100 gz gamma0ffffh beta and 725 and 71 gamma or 32 or 334.9 对于下面的数据定义,三条mov指令分别汇编成什么?(可用立即数方式表示)tableadw10 dup(?)tablebdb10 dup(?)tablecdb1234 movax,length tableamovbl,length tablebmovcl,length ta

32、blec【解】:movax,length tableamov ax, oooahmovbl,length tableb mov bl, 0ahmovcl,length tablec mov cl, o1h4.10 对于下面的数据定义,各条mov指令单独执行后,有关寄存器的内容是什么?fldbdb?tableadw20dup(?)tablebdbabcd mov ax,type fldb mov ax,type tablea mov cx,length tablea mov dx,size tablea mov cx,length tableb【解】:(1) mov ax,type fldb (

33、ax)= 1 (2) mov ax,type tablea (ax)= 2 (3) mov cx,length tablea (cx)= 20 (4) mov dx,size tablea (dx)= 40 (5) mov cx,length tableb (cx)= 1 8.1 解释下列概念: 中断dma,中断源,中断向量中断向量表,不可屏蔽中断,通道fcb,中断嵌套,文件标记中断入口,可屏蔽中断【解】:答: 当进程要求设备输入数据时,cpu把准备存放输入数据的内存起始地址以及要传送的字节数分别送入dma控制器中的内存地址寄存器和传送字节计数器。 发出数据传输要求的进行进入等待状态。此时正在

34、执行的cpu指令被暂时挂起。进程调度程序调度其他进程占据cpu。 输入设备不断地窃取cpu工作周期,将数据缓冲寄存器中的数据源源不断地写入内存,直到所要求的字节全部传送完毕。 dma控制器在传送完所有字节时,通过中断请求线发出中断信号。cpu在接收到中断信号后,转入中断处理程序进行后续处理。 中断处理结束后,cpu返回到被中断的进程中,或切换到新的进程上下文环境中,继续执行。中断源:引起中断的事件称为中断源。中断向量表:每种中断都给安排一个中断类型号。80x86中断系统能处理256种类型的中断,类型号为0h0ffh。如图8.3所示的中断源,系统时钟的中断类型为08,键盘为09,软中断中的除法错

35、误的中断类型为0等。每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各类型中断处理程序的入口地址表。中断嵌套:正在运行的中断处理程序,又被其他中断源中断,这种情况叫做中断嵌套。中断就是cpu在执行当前程序时由于内外部事件引起cpu暂时停止当前正在执行的程序而转向执行请求cpu暂时停止的内外部事件的服务程序,该程序处理完后又返回继续执行被停止的程序;中断向量是中断处理子程序的入口地址;地址范围是00000h-003ffh。实验一 系统认识实验一实验目的掌握tdn86/88教学实验系统的基本操作。二实验设备tdn86/88教学实验系统一台。三实验内容及步骤1. 系统认识实验(1)(1)程

36、序的输入与修改从3500h内存单元开始建立0-15共16个数据。实验步骤:a 使用串行通讯电缆将实验系统与pc机相连。b 开启实验系统。c 在系统软件所在目录(默认为c:tangduw8688)下运行文件wmd86.exe进入集成操作软件环境,打开文件菜单选择新建,即可开始输入源程序。d 输入程序后,在文件菜单中选择保存程序,注意文件名的格式,扩展文件名必须为*.asm,例:abc.asm。e 在编译菜单中选择汇编(ctrl+f2)对源程序进行汇编,若源程序没有错误生成目标文件*.obj,若源程序中有错误则返回错误信息,根据错误信息对源程序进行修改后再进行汇编。f 汇编无误后,在编译菜单中选择

37、链接(ctrl+f3)对汇编生成的*.obj目标文件进行链接,链接信息显示于屏幕上,如没有错误,生成相应的可执行文件*.exe。g 在窗口菜单中选择调试(ctrl+1)打开调试窗口,出现系统提示符“>”后选择菜单中的装入程序,选择相应的*.exe文件,填入程序段地址与偏移量(默认段地址0000,偏移量2000,一般不用修改),确定后pc开始将程序从磁盘装入到教学实验系统内存,提示装载完毕后使用u命令进行反汇编,检查程序是否正确装入。u命令输入格式为u0000:2000。h 当发现源程序输入错误或需要调整时,在调试窗口下可用a命令来修改,如修改2000句为mov di,3500的操作如下:

38、显示信息键入信息>a20000000:2000mov di,35000000:2003>(2)运行程序系统提供了单步运行、断点运行、连续运行等方式,具体操作如下:a. 单步运行:在“>”提示符下输入t或点击菜单中的单步运行执行,每运行一条指令后会显示下一条待执行指令并显示变化寄存器的内容,重复t可一步一步运行直至程序结束。b. 连续运行:在“>”提示符下输入g0000:2000(在系统默认段址cs0000情况下可直接输入g2000)可连续运行程序,在运行过程中,可通过ctrl+break或点击菜单中的停止来终止程序运行。c. 断点运行:在程序中可用b命令定义断点,系统规

39、定最多定义10个断点,例如:显示信息键入信息>b0:20091:>上例中定义了2009地址为断点,输入gb0000:2000程序连续运行至断点时,程序中断并显示当前各寄存器内容。gb是g命令的扩充,表示含断点连续运行程序,断点仅当系统复位时清除。(3)内存单元的内容显示:使用d0000:3500可查看3500h-350fh单元中的内容是否为0-15共16个数。(4)内存单元内容的修改:若要修改某一单元内容,可进行如下操作,其中,“空格”键用于向待编辑单元的高地址方向移动地址,而“-”键则向反方向移动地址;用来确认输入,退出e命令。显示信息键入信息>e35000000:3500

40、 00_01 space0000:3501 01_space0000:3502 02_ - 0000:3501 01_>2. 系统操作练习(2)将内存3500h单元开始的0-15共16个数传递到3600h单元开始的数据区中。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(2)e3500,在3500-3510单元中分别送入00、01、02。(3)g0000:2000,运行程序,按ctrl+break中断,返回监控。(4)d3600,显示结果:3600 00 01 02 。实验二 运算类编程实验一实验目的1. 掌握使用运算类指令编程及调试方法。2. 掌握运算类指令对各状态标志位

41、的影响及其测试方法。二实验设备tdn86/88教学实验系统一台三实验内容及步骤8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对二进制、bcd码数据类型进行算术运算。1. 二进制双精度加法运算计算xyz,将结果z存入某存储单元。本实验程序是双精度(2个16位,既32位)运算,利用累加器ax,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用adc指令,则低位相加有进位时,cf1,高位字相加时,同时加上cf中的1。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(设:cs:0000h,ip:2

42、000h)(2)用u0000:2000查看mov ax,xxxx(data)语句,得到数据段段地址cs:xxxx。用e命令exxxx:0000给xl,xh,yl,yh赋值存入二进制数a0 65 15 00和9e b7 21 00。(3)g0000:2000,运行程序。(4)dxxxx:0008,显示计算结果:3e 1d 37 00 cc 。(5)反复试几组数,考察程序的正确性。2. 十进制数的bcd码减法运算计算x-yz,其中,x、y、z为bcd码。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(设:cs:0000h,ip:2000h)(2)用u0000:2000查看mov ax

43、,xxxx(data)语句,得到数据段段地址cs:xxxx。用e命令exxxx:0000给x,y赋值存入40和12的bcd码:00 04 02 01。(3)g0000:2000,运行程序。(4)dxxxx:0004,显示计算结果:08 02 cc 。(5)反复试几组数,考察程序的正确性。3. 乘法运算本实验实现十进制数的乘法,被乘数和乘数均以bcd码形式存放于内存中,乘积在屏幕上显示。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(2)用u0000:2000查看mov ax,xxxx(data)语句,得到数据段段地址cs:xxxx。用e命令exxxx:0000给在对应数据段填入乘

44、数与被乘数。(3)g0000:2000,运行程序,屏幕显示结果。用ctrlbreak可终止程序运行。(4)反复试几组数,考察程序的正确性。四思考题1. 编写有符号数a1b1a2b2的程序,a1、a2、b1、b2均为符号数。2. 编写两个数值长度不等的bcd码相加程序。实验三 分支程序设计实验一实验目的1. 掌握分支程序的结构。2. 掌握分支程序的设计、调试方法。二实验设备tdn86/88教学实验系统一台三实验内容及步骤1. 比较两个字符串str1与str2是否相同,若相同则在屏幕上显示match,不同则显示nomatch。2. 设计一数据块间的搬移程序设计思想:程序要求把内存中一数据区(称为源

45、数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图3-1所示。图3-1对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏,可以得出以上结论:当源数据块首址>目的块首址时,从数据块首地址开始传送数据。当源数据块首址<目的块首址时,从数据块末地址开始传送数据。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(2)用e命令在以si为起址的单元中填入16个数。(3)g0000:2000,运行程序。(4)用d命令查看d

46、i为起址的单元中的数据是否与si单元中的数据相同。(5)试改变si、di的取值,观察在三种不同的数据块情况下程序的运行。四思考题为什么当源数据块首址>目的块首址时,应从数据块首地址开始传送数据?而当源数据块首址<目的块首址时,应从数据块末地址开始传送数据?实验四 循环程序设计实验一实验目的1. 加深对循环结构的理解。2. 掌握循环结构程序设计的方法。3. 熟练掌握调试循环程序的方法。二实验设备tdn86/88教学实验系统一台三实验内容及步骤1. 编制程序计算式子1+2+3+99+100的结果。2. 求某数据区内负数的个数设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数

47、据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(2)e3000输入数据如下:300006(数据个数)300112 88 82 90 22 33(3)g0000:2000,运行实验程序。(4)d3007,显示结果03。四思考题修改程序2,使其能分别求出数据区中正数、零和负数的个数。实验五 排序程序设计实验一实验目的1. 掌握分支、循环、子程序调用等基本的程序结构。2. 学习综合程序的设计、编制及调试。二实验设备tdn8

48、6/88教学实验系统一台三实验内容及步骤1. 在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用气泡法对该数据区中数据按递增关系排序。设计思想:a. 从最后一个数(或第一个数)开始,依次把相邻的两个数进行比较,即第n个数与第n1个数比较,第n1个数与第n2个数比较等等;若第n1个数大于第n个数,则两者交换,否则不交换,直到n个数的相邻两个数都比较完为止。此时,n个数中的最小数将被排在n个数的最前列。b. 对剩下的n1个数重复上步,找到n1个数中的最小数。c. 重复第二步,直到个数全部排序好为止。实验步骤:(1)输入程序并检查无误,经汇编、连接后装入系统。(2)用e3000在3000-3009h数据区中任意放入10个无符号数。(3)g0000:2000,运行实验程序。(4)用d3000检查排序结果。(5)反复修改数据区中的数,运行程序并观察结果,以验证程序的正确性。2. 学生成绩名次表将分数为1-100之间的30个成绩存入首址为3000h的单元中,3000h+i表示学号为i的学生成绩。编写程序能在3100h开始的区域排出名次表,3100h+i为学号i的学生名次。实验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论