ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:24.82KB ,
资源ID:23685386      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23685386.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言王爽第二版课后答案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、汇编语言王爽第二版课后答案第一章基础知识检测点1.1(第8页)13(2) 1024,0,1023(3) 8192,1024(4) 2A30,2A20,2A10(5) 64,1,16,4(6) 1,1,2,2,4 512,256(8)二进制注意:1.第4题中的符号A指求籍运算(如:2A30指2的30次方)第二章寄存器(CPU工作原理)检测点2.1(第18页)(1)写出每条汇编指令执行后相关寄存器中的值。第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第 一空:D88

2、2H第十二空:D888H第十三空:D810H第十四空:6246H 只能使用目前学过的汇编指令,最多使用 4条指令,编程计算2的4次方。解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(第23页)(1)00010H,1000FH 1001H,2000H第2题说明:因为段的起始地址要为 16的倍数。所以当段地址 小于1001H或大于2000H时CPUK无法寻到。检测点2.3(第33页)答:CPU修改了 4次IP的值。情况如下:第1次:执行完 mov ax,bx后第2次:执行完sub ax,ax后第3次:读入jmp ax后第4次:执行完jmp ax后最后I

3、P的值为0实验1查看CPU和存,用机器指令和汇编指 令编程(第33页)1.预备知识:Debug的使用此部分略2.实验任务(第43页)(1)此部分略此部分略通过DEBUC的D命令查看到主板的生产日期以 月、日、年,分隔符为/的格式存储在存 ffff:0005ffff:000C( 共8个字节单元中)处。此生产日期不能被改变,因为其具有只读属性。通过向存中的显存写入数据,使计算机根据写入的 数据进行ASCII转换,并将转换后且可打印的字符 输出到屏幕上。点i:关于显存的详细讨论不在此 题围第三章 寄存器(存访问)检测点3.1(第52页)(1)(题目:略)第一空:2662H第二空:E626H第三空:E

4、626H第四空:2662H第五空:D6E6H第六空:FD48H第七空:2C14H第八空:0000H第九空:00E6H第十空:0000H第 一空:0026H 第十二空:000CH提示:此题可在DEBU映利用E命令在本机上按照 题目中所给出的存单元及其数据进行相应地修改, 然后再用A命令进行写入(题目中所给出的)相应的 汇编指令,最后再进行 T命令进行逐步执行,以查 看相应结果。1.指令序列如下:mov ax,6622hjmp 0ff0:0100mov ax,2000hmov ds,axmov ax,0008mov ax,00022. 写出CPU执行每条指令后,CS IP和相关寄存器 中的数值。a

5、x=5BEAax=5CCAbx=30F0bx=6029sp=FE 220FE 5CCAsp=FC 220FC 6029sp=FE 6029sp=100H 5CCAsp=FE 220FE 30F0sp=FC 220FC 2E39说明:此题可能因机子软、硬件环境不同而导致答 案不一致!指令序列寄存器CSIPDSAXBX初始值2000H00001000H00mov ax,6622h2000H00031000H6622H0000jmp 0ff0:01001000H00001000H6622H0000mov ax,2000h1000H00031000H2000H0000mov ds,ax1000H000

6、52000H2000H0000mov ax,00081000H00082000HC389H10000mov ax,00021000H000B2000HEA66H00003.再次体会:数据和程序有区别吗?如何确定 存中的信息哪些是数据,哪些是程序?答:(略)检测点3.2(第66页)(1)mov ax,2000Hmov ss,axmov sp,10Hmov ax,1000Hmov ss,axmov sp,0H实验2用机器指令和汇编指令编程 (第70页)1.预备知识:Debug的使用此部分略2.实验任务(1)使用Debug,将下面的程序段写入存,逐条执行, 根据指令执行后的实际运行情况填空。从第一空

7、开始依次如下:(2)仔细观察图3.19的实验过程,然后分析:为什 么2000:02000:f 中的容会发生改变?答:因为用T指令进行调试时,会产生中断。而为 了保护现场,CPU则先将标志寄存器进栈、再把1 前CS的值进栈,最后将IP的值进栈。关于中断 的详细容的讨论不在此题围 第五章BX和loop指令实验4 BX和loop的使用(第113页)(1)编程,向存0:2000:23F依次传送数据 063(3FH)。程序如下:assume cs:codesgcodesg segmentmov ax,0020hmov ds,axmov bx,0mov dl,0mov cx,40hs: mov bx,dl

8、inc dlinc bxloop smov ax,4c00hcodesg endsend编程,向存0:2000:23F依次传送数据063(3FH),程序中只能使用9条指令,9条指令中 包括“mov ax,4c00h ”和“int 21h ”。程序如下:assume cs:codesgcodesg segmentmov ax,0020hmov ds,axmov bl,0mov cx,40hs: mov bx,blinc blloop smov ax,4c00hint 21hcodesg endsend(3)下面的程序的功能是将mov ax,4c00h ”之前 的指令复制到存0:200处,补全程序

9、。上机调试, 跟踪运行结果。assume cs:codecode segmentmov ax, code ;code 为所填写的数据mov ds,axmov ax,0020hmov cx, 18h ;18h 为所填写的数据s: mov al,bxmov es:bx,alinc bxloop smov ax,4c00hint 21hcode endsend提示:1.因为题目的要求是把代码段的指令当作数据,复制到目的地址。所以,源数据段 ds和代码段cs相同,通过 mov ax,code/mov ds,ax (/ 符号是指 两条指令的分隔)来设置源数据段。2.可以先假设要复制8位1h0ffh数据(

10、因为我们肉眼就可以看出此程序的长度不可能大于 0ffh个 字节)的字节数(如:10h),把程序补全,以便通过 编译。这时我们以准确的第一空所填容 code与假 想的第二空容10h将程序补充完整并将其编译、连 接、运行,接着进行 DEBUG在DEBUGS我们可用 R命令查看CX的值,这时我们可以看到 CX的值为1D,由此我们可以算出该程序的长度 1Dh-5h=18h,之所以减5是为了满足题目的要求 (因为mov ax,4c00h/int 21h 这两条指令的长度等于5)第六章包含多个段的程序检测点6.1(第119页)assume cs:codesgcodesg segmentdw0123h,04

11、56h,0789h,0abch,0defh,0fedh,0cb ah,0987hmov ds,axmov bx,0mov cx,8s: mov ax,bxmov cs:bx,ax ; 此条指令为所填指令add bx,2loop smov ax,4c00hint 21hcodesg endsend startassume cs:codesgcodesg segmentdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw 0,0,0,0,0start:mov ax, cs ;cs 为所填第一空mov ss,axmov sp,1ah ; 此条指令为所

12、填第二空mov ax,0mov ds,axmov bx,0mov cx,8s:push bxpop cs:bx ; 此条指令为所填第三空add bx,2loop smov ax,4c00hint 21hcodesg endsend start实验5编写、调试具有多个段的程序 (第123页)1.保持不变2.3.X-2 , X-1(2)1.保持不变2.3.X-2 , X-14.(N/16+1)*16 说明:N/16只取整数部分1.保持不变2.3.X+3 , X+4答:第3个仍然可以正确执行。因为如果把 end指令后的标号start去掉后,编译器便会 顺序执行程序。换句话说:当未给编译器预先 的通知

13、,要求其从哪开始执行程序时, 编译器就自动以至上向下的顺序进行编译执行源 程序。(5)完整程序如下:assume cs:codea segmentdb 1,2,3,4,5,6,7,8a endsb segmentdb 1,2,3,4,5,6,7,8b endsc segmentdb 0,0,0,0,0,0,0,0c endscode segmentstart:mov ax,amov es,axmov ax,cmov ds,axmov bx,0mov cx,8s1:mov ax,es:bxadd bx,axadd bx,2loop s1mov ax,bmov es,axmov ds,axmov

14、bx,0mov cx,8s2:mov ax,es:bxadd bx,axadd bx,2loop s2mov ax,4c00hint 21hcode endsend start(6)完整程序如下:assume cs:codea segmentdw 1,2,3,4,5,6,7,8a endsb segmentdw 0,0,0,0,0,0,0,0b endscode segmentstart:mov ax,bmov sp,10hmov ax,amov ds,axmov bx,0mov cx,8s: push bxadd bx,2loop smov ax,4c00hint 21hcode endse

15、nd start第七章更灵活的定位存地址的方法实验6实践课程中的程序(第147页)编程:完成问题中的程序。问题7.9完整程序如下:assume cs:codesg,ss:stacksg,ds:datasgstacksg segmentdw 0,0,0,0,0,0,0,0stacksg endsdb 1. display db 2. brows db 3. replace db 4. modify datasg endscodesg segmentstart:mov ax,stacksgmov ss,axmov sp,16mov ax,datasgmov ds,axmov bx,0mov cx,

16、4s:;夕卜循环push cxmov si,3mov cx,4s0:; 循环mov al,bx+siand al,11011111bmov bx+si,alinc siloop s0add bx,16datasg segmentpop cxdw 11542,14430,45257,17800loop smov ax,4c00hint 21hcodesg endsend start第八章数据处理的两个基本问题实验7寻址方式在结构化数据访问中的应用(第160页)完整程序如下:assume cs:codesg,ds:data,es:tabledata segmentdb1975,1976,1977,

17、1978,1979,1980,1981,1982,1983db1984,1985,1986,1987,1988,1989,1990,1991,1992db 1993,1994,1995; 以上是表示21年的21个字符串dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000; 以上是表示21年公司总收的21个dword型数据dw3,7,9,13,28,38,130,220,476,77

18、8,1001,1442,2258,2793,4037,5635,8226; 以上是表示21年公司雇员人数的21个word型数据data endstable segmentdb 21 dup(year summ ne ?)table endscodesg segmentstart:mov ax,datamov ds,axmov ax,tablemov es,axmov bx,0mov si,0mov di,0mov cx,21s:; 进入循环mov al,bxmov es:di,almov al,bx+1mov es:di+1,almov al,bx+2mov es:di+2,almov al,

19、bx+3mov es:di+3,al; 以上8句的作用是存放年份mov ax,54hbx; 第一个年收入的段基址为54Hmov dx,56hbxmov es:5hdi,axmov es:7hdi,dx; 以上4句的作用是存放公司总收入mov ax,0A8hsi; 第一个人数的段基址为0A8Hmov es:0Ahdi,ax; 以上2句是存放公司的人数mov ax,54hbxdiv word ptr ds:0A8hsimov es:0dhdi,ax; 以上3句是存放人均收入add bx,4add si,2add di,16; 以上3句是为下一次循环时存放数据做准备;3 个寄存器递增的速度决定了所要

20、存取的数据的位置的偏移地址loop s ; 跳到标号s处mov ax,4c00hint 21hcodesg ends程序说明:此程序虽然可以达到预期效果 (读者可以自行调试验证),但实现方法比较简单, 读者有兴趣的话可以寻找一种 更具结构化的 设计方法来完成。第九章转移指令的原理检测点9.1(第170页) 若要使jmp指令执行后,CS:IP指向程序 的第一条指令,在 data中中应该定义哪些数 据?完整程序如下:assume cs:code,ds:datadata segmentdb 0,0,0data endscode segmentstart: mov ax,datamov ds,axmo

21、v bx,0jmp word ptr bx+1; 段间接转移code endsend start;解题理由:为了使IP的值经跳转后变为 0,则需保证ds:bx+1处的字型单元数据为 0000H,;所以定义3个字节型数据0就符合“应该” 的要求(2)补全程序,使jmp指令执行后,CS:IP指 向程序的第一条指令。end start完整程序如下:assume cs:code,ds:datadata segmentdd 12345678hdata endscode segmentstart: mov ax,datamov ds,axmov bx,0mov bx, bx ; 源操作数bx为所填容mov

22、 bx+2, cs ; 源操作数cs为所填 容jmp dword ptr ds:0code endsend start 用Debug查看存,结果如下:2000:1000 BE 00 06 00 00 00 .则此时,CPU行指令:mov ax,2000Hmov es,axjmp dword ptr es:1000H后,(CS)=? , (IP)=?提示:为了使本机环境2000:1000至2000:1005 中的数据与题目中所给出的数据一致,可以通过编写程序来完成, 完整程序如下:assume cs:codecode segmentstart:mov ax,2000hmov ds,axmov b

23、x,1000hmov word ptr bx.0,0BEHmov word ptr bx.2,6hmov word ptr bx.4,0;运行完上6句则使2000:1000-2000:1005 中的数据依次为:BE,00,06,00,00,00;以上6句则按题目中的数据进行初始化,以便使运行环境符合题目要求;mov ax,2000hmov es,axjmp dword ptr es:1000hcode endsend start经上机调试得出:CS=0006H,IP=00BEH检测点9.2(第172页)从标号s处开始所要填写的四条指令依次如 下:第一条指令: mov cl,bx第二条指令: m

24、ov ch,0第三条指令:jcxz ok第四条指令:inc bx检测点9.3(第173页)补全程序,利用loop指令,实现在存 2000H 段中查找第一个值为 0的byte ,找到后,将它的偏移地址存储在 dx中。assume cs:codecode segmentstart:mov ax,2000hmov ds,axmov bx,0s:mov cl,bxmov ch,0inc cx ;此条指令为题 目要求补全的指令inc bxloopok:dec bxmov dx,bxmov ax,4c00hint 21hcode endsend start解答提醒:此题可用假设法来完成(比如设 2000:

25、0000 至 2000:0003 的容依次为:1E 06 00 0A)。此题要注意loop指令的使用规则,同时 要注意区别存单元与存单元中的数据(或 容)的不同。实验8分析一个奇怪的程序(第174页)分析下面的程序, 在运行前思考:这个程序可以正确返回吗?运行后再思考:为什么是这种结果?通过这个程序加深对相关容的理解。assume cs:codesgcodesg segmentmov ax,4c00hint 21hstart:mov ax,0s:nopnopmov di,offset smov si,offset s2mov ax,cs:simov cs:di,axs0:jmp short s

26、s1:mov ax,0int 21hmov ax,0s2:jmp short s1nop实验9根据材料编程(第175页)codesg endsend start程序可以正常返回。详细分析:在此题中较为深入地考察了 段直接短转移 形如:jmp short 标号的概念。我们知道程序中:mov di,offset smov si,offset s2mov ax,cs:simov cs:di,ax四条指令的作用是将标号 s2处的一条指令复制到标号s处。这时我们应该关心所复制的语 句jmp short s1对程序的影响: 我们知道在段直接短转移指令所对应的机器码中, 并不包含转移的目的地址, 而包含的是

27、转移的位移量(如对此概念还不太熟悉,请查看书中第 167 页的容)。也就是说,在源程序的编译过程中, 编译器遇到段直接短转移形如:jmp short 标号时就会自动算出其要跳转的位移量,以 便程序在执行段直接短转移的指令时就根 据位移量进行(向前或向后)跳转。通过调试中 的U命令我们可以看到指令 s2:jmp shorts1所对应的机器码是 EBF6, F6h(-10d的补码)就是跳转的位移量此位移量也可由指令 s2:jmp short s1 处的偏移地址 18h减去指令s2:jmp short s1 后一个字节的偏移地址22h得出。这时我们就知道了其实复制到标 号s处的指令所对应的机器码就是

28、 EBF6(刚好取代两个nop所对应的机器码),它的作用就 是将当前IP向前移动10个字节。当程序执行 标号s0处的指令后,程序便跳到标号 s处接着执行标号s处的指令。s处的指令的作用是 向前跳10字节,于是便跳到了代码中的第一 条指令,继续执行后便实现了程序的正常返 回。注意:此程序不会也不可能执行标号 s1处后的指令。assume cs:code,ds:data,ss:stackdata segmentdb welcome to masm!; 定义要显示的字符串(共16字节)db 02h,24h,71h ; 定义三种颜色属性data endsstack segmentdw 8 dup(0)sta

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

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