汇编语言(王爽)_第二版_课后题全_答案25

合集下载

王爽汇编语言第二版(全部)

王爽汇编语言第二版(全部)
本课件由汇编网()制作提供
1.1 机器语言
机器语言是机器指令的集合。 机器指令展开来讲就是一台机器可
以正确执行的命令。
本课件由汇编网()制作提供
1.1 机器语言
指令:01010000 (PUSH AX) 电平脉冲:
本课件由汇编网()制作提供
从上面我们知道CPU是如何进行数据读写 的。可是我们如何命令计算机进行数据 的读写呢?
本课件由汇编网()制作提供
1.7 CPU对存储器的读写
对于8086CPU,下面的机器码能够完成 从3号单元读数据:
机器码: 101000000000001100000000 含义:从3号单元读取数据送入寄存器AX CPU接收这条机器码后将完成上面所述的读
1.6 存储单元
对于大容量的存储器一般还用以下单位 来计量容量(以下用B来代表Byte):
1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
磁盘的容量单位同内存的一样,实际上 以上单位是微机中常用的计量单位。
本课件由汇编网()制作提供
控制总线上发送的控制信息
本课件由汇编网()制作提供
1.10 控制总线
本课件由汇编网()制作提供
1.10 控制总线
前面所讲的内存读或写命令是由几 根控制线综合发出的:
其中有一根名为读信号输出控制线负 责由CPU 向外传送读信号,CPU 向该 控制线上输出低电平表示将要读取数 据;
地址总线 数据总线 控制总线
图示
本课件由汇编网()制作提供
1.7 CPU对存储器的读写
总线在逻辑上划分的图示:
本课件由汇编网()制作提供
1.7 CPU对存储器的读写

汇编语言王爽第二版课后答案培训资料

汇编语言王爽第二版课后答案培训资料

汇编语言王爽第二版课后答案第一章基础知识检测点1.1(第8页)----------------------(1) 13(2) 1024,0,1023(3) 8192,1024(4) 2^30,2^20,2^10(5) 64,1,16,4(6) 1,1,2,2,4(7) 512,256(8) 二进制注意:1.第4题中的符号'^'指求幂运算(如: 2^30指2的30次方)第二章寄存器(CPU工作原理)检测点2.1(第18页)----------------------(1)写出每条汇编指令执行后相关寄存器中的值。

第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第十一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(第23页)----------------------(1)00010H,1000FH(2)1001H,2000H第2题说明:因为段的起始地址要为16的倍数。

所以当段地址小于1001H或大于2000H时CPU都无法寻到。

检测点2.3(第33页)----------------------答:CPU修改了4次IP的值。

情况如下:第1次:执行完mov ax,bx后第2次:执行完sub ax,ax后第3次:读入jmp ax后第4次:执行完jmp ax后最后IP的值为0实验1 查看CPU和内存,用机器指令和汇编指令编程(第33页)-----------------------------------------------------1.预备知识:Debug的使用<此部分略>2.实验任务(第43页)(1)<此部分略>(2)<此部分略>(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。

汇编语言第二版王爽完整答案(供参考)

汇编语言第二版王爽完整答案(供参考)

第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。

(2)1KB的存储器有1024个存储单元。

存储单元的编号从0到1023。

(3)1KB的存储器可以存储1024*8个bit,1024个Byte。

(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。

(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。

(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。

则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。

(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。

(8)在存储器中,数据和程序以二进制形式存放。

第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。

mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。

汇编语言(王爽)-第二版-课后题全-答案【范本模板】

汇编语言(王爽)-第二版-课后题全-答案【范本模板】

检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。

(2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 .(3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte.(4)1GB是 1073741824 (2^30)个Byte、1MB是 1048576(2^20)个Byte、1KB是 1024(2^10)个Byte。

(5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为:64 (KB)、 1 (MB)、 16 (MB)、 4 (GB)。

(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根.则它们一次可以传送的数据为: 1 (B)、 1 (B)、 2 (B)、 2 (B)、 4 (B)。

(7)从内存中读取1024字节的数据,8086至少要读 512 次,80386至少要读 256 次. (8)在存储器中,数据和程序以二进制形式存放.解题过程:(1)1KB=1024B,8KB=1024B*8=2^N,N=13。

(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。

(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit).(4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。

(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N.这样的CPU最多可以寻找2的N次方个内存单元。

(一个内存单元=1Byte).(6)8根数据总线一次可以传送8位二进制数据(即一个字节)。

(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。

汇编语言第二版王爽完整答案

汇编语言第二版王爽完整答案

汇编语言第二版王爽完整答案第1章基础知识检测点1.1(1) 1个的寻址能力为8,那么它的地址总线的宽度为13。

(2) 1的存储器有1024个存储单元。

存储单元的编号从0到1023。

⑶1的存储器可以存储1024*8个,1024个。

(4) 1、1、1分别是2八30、2八20、2A10。

(n A m的意思是n的m次幕)(5) 8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64()、1()、16()、4()。

⑹8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32 根。

则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。

⑺从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。

(8)在存储器中,数据和程序以二进制形式存放。

检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。

,62627 4A3H,31H 31A3H,23H 3123H6246H,826 8266246H82604D8H0482H6C82H882H,6 888H810H6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方解:,2检测点2.2(1)给定段地址为0001H,仅通过变化偏移地址寻址,的寻址范围为00010H到1000(2)有一数据存放在内存20000H单元中,先给定段地址为,若想用偏移地址寻到此单元则应满足的条件是:最小为1001H,最大为2000H检测点2.3下面的3条指令执行后,几次修改?都是在什么时候?最后中的值是多少?解:修改4次;第一次在读取“ ”后,第二次在读取“ ”后,第三次在读取“ ”后,第四次在执行完“ ”后;最后中的值为0。

实验1查看和内存,用机器指令和汇编指令编程1. 略2.(1) 略⑵略(3) 查看内存中的内容。

汇编语言 第二版 王爽 完整答案

汇编语言 第二版 王爽 完整答案

第1章基础知识检测点1.1(1)1个的寻址能力为8,那么它的地址总线的宽度为13。

(2)1的存储器有1024个存储单元。

存储单元的编号从0到1023。

(3)1的存储器可以存储1024*8个,1024个。

(4)1、1、1分别是2^30、2^20、2^10。

(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64()、1()、16()、4()。

(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。

则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。

(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。

(8)在存储器中,数据和程序以二进制形式存放。

第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。

,62627 4A3H,31H 31A3H,23H 3123H6246H,826 8266246H82604D8H0482H6C82H882H,6 888H810H6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解:,2检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,的寻址范围为00010H到1000。

(2) 有一数据存放在内存 20000H 单元中,先给定段地址为,若想用偏移地址寻到此单元。

则应满足的条件是:最小为1001H,最大为2000H。

检测点2.3下面的3条指令执行后,几次修改?都是在什么时候?最后中的值是多少?解:修改4次;第一次在读取“ ”后,第二次在读取“ ”后,第三次在读取“ ”后,第四次在执行完“ ”后;最后中的值为0。

实验1 查看和内存,用机器指令和汇编指令编程1.略2.(1)略(2)略(3)查看内存中的内容。

汇编语言程序设计(第二版)课后习题答案-精品资料

汇编语言程序设计(第二版)课后习题答案-精品资料

汇编语言程序设计(第二版)课后习题答案第二章1.解答:有256个2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元E51E3C2A3.解答:30022H字节单元内容:ABH30024H字节单元内容:EFH30021H字单元内容:AB34H30022H字单元内容:CDABH4.解答:这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址5.解答:CS+IP第一个字的物理地址为:0AAA40H6.解答:条件标志OF,SF,ZF,CF,的值依次为:0,0,0,07.下列操作可使用那些寄存器?(1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH,AL等(2)循环计数CX(3)乘法和除法DX,AX,AH,AL(4)保存段地址CS,DS,ES,SS(5)表示运算结果为O FLAGS(6)将要执行的指令地址IP(7)将要从堆栈取出数据的地址BP,SP,SS8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP9.一一对应;5--A4--B2--C3--D12--E9--F11--G10--H13--I8--J7--K6---L1--M15--N14--O第三章1.(1)立即寻址没有(2)直接寻址7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址0D5B4H(6)基址变址寻址8E18H(7)相对基址变址004FH2.根据下列要求,写出相应的汇编指令。

(1)ADD DX,BX(2)ADDAL,[BX][SI](3)ADD[BX][0B2H],CX(4)MOV AX,2A59H ADD[0524H],AX(5)ADDAL,0B5H3.(1)寄存器间接寻址MOVBX,OFFSET[BLOCK][0AH]MOV DX,[BX](2)寄存器相对寻址MOV SI,OAHMOVDX,[BLOCK][SI](3)基址变址寻址MOVBX,BLOCKMOVSI,OAHMOVDX,[BX][SI]4.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容。

汇编语言(王爽)_第二版_课后题全_答案5

汇编语言(王爽)_第二版_课后题全_答案5

DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0100 NV UP EI PL NZ NA PO NC0C1C:0100 B80200 MOV AX,0002-tAX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0103 NV UP EI PL NZ NA PO NC0C1C:0103 01C0 ADD AX,AX-tAX=0004 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0105 NV UP EI PL NZ NA PO NC0C1C:0105 01C0 ADD AX,AX-tAX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0107 NV UP EI PL NZ NA PO NC0C1C:0107 01C0 ADD AX,AX-tAX=0010 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0109 NV UP EI PL NZ AC PO NC0C1C:0109 20881615 AND [BX+SI+1516],CL DS:1516=00-q检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH 。

解题过程:物理地址=SA*16+EAEA的变化范围为0h~ffffh物理地址范围为(SA*16+0h)~(SA*16+ffffh)现在SA=0001h,那么寻址范围为(0001h*16+0h)~(0001h*16+ffffh)=0010h~1000fh检测点2.2(2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。

汇编语言(第2版)王爽著-课后实验报告详解

汇编语言(第2版)王爽著-课后实验报告详解

汇编语言实验报告:班级学号 学生姓名 提交日期成 绩实验1-1如下:用E命令将指令写入内存:用A命令将指令写入内存:实验1-2代码如下:用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。

如图:实验1-3:用D命令输入内存fff0h~fffffh,则可看到:生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有:在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。

实验1-4代码如下:内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节实验2-1:(按实验结果填空)Mov ax,ffffMov ds,axMov ax,2200Mov ss,axMov sp,0100Mov ax,[0] ;ax=5BEAAdd ax,[2] ;ax=5CCAMov bx,[4] ;bx=30F0Add bx,[6] ;bx=6026Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是6026 Pop ax ;sp=00FE; ax=6026.Pop bx ;sp=0100; bx=.5CCAPush [4] ;sp=00FE; 修改的内存单元的地址是2200:00FE内容是30F0 Push [6] ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是2F36 实验截图如下:实验2-2(分析问答实验)答:因为T命令是单步中断,我们在后面学习后知道,CPU执行中断时会保留现场,即将标志寄存器,CS,IP等入栈,而实验中栈的地址正好是要查询的内存地址,所以即便未对内存单元进行写入命令,但里面的值会因为CPU要保留现场自动被改了实验3(1)代码:ASSUME CS:CODES CODES SEGMENT START:mov ax,2000hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxMOV AH,4CHINT 21HCODES ENDSEND START (2)debug跟踪:(3)用debug跟踪查看PSP中的内容:可见PSP的头两个字节是CD 20,与书上的一致实验4-1代码如下:ASSUME CS:CODESCODES SEGMENTSTART:mov ax,0mov ds,axmov bx,200hmov cx,64s: mov [bx],alinc alinc bxloop sMOV AH,4CHINT 21HCODES ENDSEND START实验4-1运行图如下:实验4-2代码如下:ASSUME CS:CODESCODES SEGMENTSTART:mov ax,200hmov ds,axmov bx,0mov cx,64s: mov [bx],bxinc bxloop sMOV AH,4CHINT 21HCODES ENDSEND START运行结果同实验4-1的一样实验4-3(补全代码)ASSUME CS:CODESCODES SEGMENTSTART:mov ax,csmov ds,axmov ax,20hmov es,axmov bx,0mov cx,16hs: mov al,[bx]mov es:[bx],alinc bxloop sMOV AH,4CHINT 21HCODES ENDSEND START因为要将代码复制到0:200处,则必须知道代码的地址,和代码的长度,代码的地址在cs和IP中,代码的长度可以编译后用U命令查看后确定,这个之前随便打一个数就可以,不影响代码的长度,因为那个数占的空间和真实的长度一样,所以用U命令后在改过来即可实验4-3的运行图如下:实验5-1代码如下:DA TAS SEGMENTdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hDA TAS ENDSSTACKS SEGMENTdw 0,0,0,0,0,0,0,0STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,stacksMOV ss,AXmov sp,16mov ax,datasmov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]MOV AH,4CHINT 21HCODES ENDSEND START实验5-1运行图如下:①CPU执行程序后,程序返回前,data段中的数据为多少?答:不变如上图②CPU执行程序后,程序返回前,CS=144Ch,SS=144Bh,DS=144Ah。

汇编语言王爽试题及答案

汇编语言王爽试题及答案

汇编语言王爽试题及答案一、选择题1. 在汇编语言中,用于定义数据的指令是:A. MOVB. ADDC. SUBD. DAT答案:D2. 下列哪个指令用于将立即数加载到寄存器中?A. MOVB. CMPC. JMPD. CALL答案:A3. 汇编语言中,用于实现无条件跳转的指令是:A. JZB. JNZC. JED. JMP答案:D二、填空题1. 在汇编语言中,指令_________用于将寄存器的内容复制到另一个寄存器中。

答案:MOV2. 汇编语言中,用于比较两个寄存器内容的指令是_________。

答案:CMP3. 汇编语言中,用于实现条件跳转的指令是_________。

答案:JZ三、简答题1. 简述汇编语言中立即数和寄存器数的区别。

答案:立即数是直接给出的数值,而寄存器数是存储在CPU内部的寄存器中的数值。

2. 解释汇编语言中的指令寻址方式。

答案:指令寻址方式是指CPU如何确定指令的操作数所在的内存地址。

常见的寻址方式包括直接寻址、间接寻址、基址寻址和索引寻址等。

四、编程题1. 编写一个汇编语言程序,实现将寄存器AX的值加到寄存器BX的值上,并将结果存储在寄存器CX中。

答案:MOV AX, 1234hMOV BX, 5678hADD BX, AXMOV CX, BXHLT2. 编写一个汇编语言程序,实现将内存地址0x1000处的值与寄存器DX的值进行比较,如果相等则跳转到标签EQUAL。

答案:MOV DX, 0x1234MOV AX, [0x1000]CMP AX, DXJE EQUALHLTEQUAL:; 相等时执行的代码 HLT。

汇编语言王爽课后答案

汇编语言王爽课后答案

汇编语言王爽课后答案【篇一:汇编语言课后习题答案王爽主编】一个值为0的字节,找到后,将它的偏移地址存储在dx中。

assume cs:codecode segmentstart: mov ax,2000hmov ds,axmov bx,0s: mov ch,0 mov cl,[bx] jcxz ok;当cx=0时,cs:ip指向okinc bxjmp short sok: mov dx,bxmov ax ,4c00hint 21hcode endsend start检测点9.3补全编程,利用loop指令,实现在内存2000h段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。

assume cs:codecode segmentstart: mov ax,2000hmov ds,axmov bx,0s:mov cl,[bx]mov ch,0 inc cxinc bxloop sok:dec bxmov dx,bxmov ax,4c00hint 21hcode endsend start书p101,执行loop s时,首先要将(cx)减1。

“loop 标号”相当于dec cxif((cx)≠0) jmp short 标号检测点10.1补全程序,实现从内存1000:0000处开始执行指令。

assume cs:codestack segmentdb 16 dup (0)stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax, 1000hmov ax,0push axretfcode endsend start执行reft指令时,相当于进行:pop ippop cs根据栈先进后出原则,应先将段地址cs入栈,再将偏移地址ip入栈。

检测点10.3下面的程序执行后,ax中的数值为多少?内存地址机器码汇编指令执行后情况1000:0 b8 00 00 mov ax,0 ax=0,ip指向1000:31000:3 9a 09 00 00 10 call far ptr s pop cs,pop ip,ip指向1000:91000:8 40 inc ax1000:9 58 s:pop ax ax=8hadd ax,ax ax=10hpop bx bx=1000hadd ax,bx ax=1010h用debug进行跟踪确认,“call far ptr s”是先将该指令后的第一个字节段地址cs=1000h入栈,再将偏移地址ip=8h入栈,最后转到标号处执行指令。

汇编语言王爽第二版课后答案

汇编语言王爽第二版课后答案

(1) 13⑵ 1024,0,1023(3) 8192,1024(4) 2A 30,2A 20,2A 10(5) 64,1,16,4(6) 1,1,2,2,4(7) 512,256(8) 二进制 注意:1.第4题中的符号'A'指求幂运算(如:2A30指2的 30次方)第二章寄存器(CPU 工作原理)检测点(第18页)检测点(第8页)(1)写岀每条汇编指令执行后相关寄存器中的值。

第一空:F4A3H第二空:31A3H第三空:3123H 第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第 ^一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用 指令,编程计算2的4次方。

解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点(第23页)(1)00010H,1000FH第四空:6246H第2题说明:因为段的起始地址要为16的倍数。

所以当段地址小于1001H或大于2000H时CPL都无法寻到。

检测点(第33页)答:CPU修改了4次IP的值。

情况如下:第1次:执行完mov ax,bx 后第2次:执行完sub ax,ax 后第3次:读入jmp ax后第4次:执行完jmp ax后最后IP的值为0实验1查看CPU和内存,用机器指令和汇编指令编程(第33页)1. 预备知识:Debug的使用<此部分略>2. 实验任务(第43页)(1)<此部分略><此部分略>通过DEBUGS的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005〜ffff:000C(共8个字节单元中)处。

此生产日期不能被改变,因为其具有’只读’属性。

⑷通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输岀到屏幕上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0000:0203 8ED8 MOV DS,AX
0000:0205 B82000 MOV AX,0020
0000:0208 8EC0 MOV ES,AX
0000:020A BB0000 MOV BX,0000
0000:020D B91800 MOV CX,0018
0000:0210 8A07 MOV AL,[BX]
0000:0212 26 ES:
0000:0213 8807 MOV [BX],AL
0000:0215 43 INC BX
0000:0216 E2F8 LOOP 0210
0000:0218 0000 ADD [BX+SI],AL
0000:021A 0000 ADD [BX+SI],AL
0000:021C 0000 ADD [BX+SI],AL
0000:021E 0000 ADD [BX+SI],AL
-q
检测点6.1
(1) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: mov ax,[bx]
mov cs:[bx],ax
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
(2) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。

栈空间设置在程序内。

完成程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0 ;10个字单元用栈空间
start:
mov ax,cs
mov ss,ax
mov sp,36
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:
push [bx]
pop cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
实验5 编写、调试具有多个段的程序
(1) 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
① CPU执行程序,程序返回前,data段中的数据为多少?解:不变
② CPU执行程序,程序返回前,cs=155ch、ss=155bh、ds=155ah。

(此题结果因环境而异,但相对差值不变)
③ 设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。

(2) 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题
assume cs:code,ds:data,ss:stack
data segment
dw 0123H,0456H
data ends
stack segment
dw 0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
① CPU执行程序,程序返回前,data段中的数据为多少?解:不变
② CPU执行程序,程序返回前,cs=155ch、ss=155bh、ds=155ah。

(此题结果因环境而异,但相对差值不变)
③ 设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。

④对于如下定义的段:
name segment

name ends
如果段中的数据占N个字节,则程序加载后,这段实际占有的空间为
(N/16+1)*16. (N/16为取整数部分)
(3) 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题
assume cs:code,ds:data,ss:stack
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
data segment
dw 0123H,0456H
data ends
stack segment
dw 0,0
stack ends
end start
① CP U执行程序,程序返回前,data段中的数据为多少?解:不变
② CPU执行程序,程序返回前,cs=155ah、ss=155eh、ds=155dh。

(此题结果因环境而异,但相对差值不变)
③ 设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。

(4) 如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说不指明程序的入口),则那个程序仍然可以正确执行?请说明原因。

解:(1)、(2)不能正确执行(入口默认为data段的第一条指令),(3)能正确执行。

如果不指明程序的入口,编译器自动默认整个代码的第一条指令为程序的入口。

(经 qingxh1 指正,在此鸣谢)
(5) 程序如下,编写code段中的内容,将a段和b段中的数据依次相加,将结果存到c段中。

assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s:
mov al,ds:[bx]
add al,ds:[bx+16]
mov ds:[bx+32],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
(6) 程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。

assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,a
mov ds,ax
mov bx,0
mov ax,b
mov ss,ax
mov sp,16
mov cx,8
s:
push [bx] inc bx
inc bx
loop s
mov ax,4c00h int 21h
code ends
end start。

相关文档
最新文档