欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:14501966       资源大小:21.49KB        全文页数:12页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、汇编语言王爽第三版课后答案汇编语言王爽第三版课后答案【篇一:汇编语言王爽第二版课后答案】lass=txt (1)13(2)1024,0,1023 (3) 8192,1024 2八30,2八20,2八10 (5) 64,1,16,4 (6) 1,1,2,2,4 512,256 (8) 二进制1.第4题中的符号八指求幂运算(如 : 2A30指2的30次方)第二章 寄存器 (cpu 工作原理 )检测点 2.1(第18 页) ( 1 )写出每条汇编指令执行后相关寄存器中的值。 第一空: f4a3h 第二空: 31a3h 第三空: 3123h 第四空: 6246h 第五空: 826ch 第六 空:624

    2、6h第七空:826ch 第八空:04d8h 第九空:0482h第十空:6c82h 第十一空: d882h 第十二空: d888h 第十三空: d810h 第十 四空: 6246h(2) 只能使用目前学过的汇编指令,最多使用 4 条指令,编程计算 2 的 4 次方。 解答如下: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点 2.2(第23 页) (1)00010h,1000fh (2)1001h,2000h第 2 题说明:因为段的起始地址要为 16 的倍数。所以当段地址小于 1001h 或大 于 2000h 时 cpu 都无法寻到。检测点 2.3(第33

    3、页) 答: 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:0005ffff:000c( 共 8 个字节单元

    4、中 )处。 此生产日期不能被改变,因为其具有 只读属性。 (4) 通过向内存中的显存写入数据,使计算机根据写入的数据进行 ascii 转换,并将转换后且可打印的字符输出到屏幕上。注:关于显存的 详细讨论不在此题范围第三章 寄存器 (内存访问 ) 检测点 3.1(第 52 页) (1)(题目:略 ) 第一空: 2662h 第二空: e626h 第三空: e626h 第四 空: 2662h 第五空: d6e6h 第六空: fd48h 第七空: 2c14h 第八空: 0000h 第九空: 00e6h 第十空: 0000h 第十一空: 0026h 第十二空: 000ch提示:此题可在 debug 中利

    5、用 e 命令在本机上按照题目中所给出的 内存单元及其数据进行相应地修改,然后再用 a 命令进行写入 (题目 中所给出的 )相应的汇编指令,最后再进行 t 命令进行逐步执行,以 查看相应结果。1ax=5bea ax=5cca bx=30f0 bx=6029sp=fe 220fe 5cca sp=fc 220fc 6029 sp=fe 6029 sp=100h 5ccasp=fe 220fe 30f0 sp=fc 220fc 2e39 说明:此题可能因机子软、硬件环境不同而导致答案不一致!(2) 仔细观察图 3.19 的实验过程,然后分析:为什么2000:02000:f 中的内容会发生改变?答:因

    6、为用 t 指令进行调试时,会产生中断。而为了保护现场, cpu 则先将标志寄存器进栈、再把当前 cs 的值进栈,最后将 ip 的值进 栈。关于中断的详细内容的讨论不在此题范围第五章 bx 和 loop 指令实验 4 bx 和 loop 的使用 (第 113 页 ) (1) 编程,向内存 0:2000:23f 依次传送数据 063(3fh) 。 程序如下: assume cs:codesg codesg segmentmov ax,0020h mov ds,ax mov bx,0 mov dl,0mov cx,40hinc dl inc bx loop smov ax,4c00h2int 21h

    7、mov bx,0mov cx,18h;18h 为所填写的数据codesg ends end(2) 编程,向内存 0:2000:23f 依次传送数据 063(3fh) ,程序中只 能使用 9 条指令, 9 条指令中 s:mov al,bx mov es:bx,al 包括 “mov ax,4c00h ”和“ int 21h 。”程序如下: assume cs:codesg codesg segment mov ax,0020h mov ds,ax mov bl,0 mov cx,40h s: mov bx,bl inc bl loop s mov ax,4c00hint 21hcodesg end

    8、s end(3) 下面的程序的功能是将 “mov ax,4c00h ”之前的指令复制到内存 0:200 处,补全程序。上机调试,跟踪运行结果。 assume cs:code code segment mov ax,code ;code 为所填写的数据 mov ds,ax mov ax,0020h mov es,axinc bx loop s mov ax,4c00hint 21hcode ends end提示:1. 因为题目的要求是把代码段内的指令当作数据,复制到目的地址。 所以,源数据段 ds 和代码段 cs 相同,通过 mov ax,code/mov ds,ax (/ 符号是指两条指令的分

    9、隔 )来设置源数据段。2.可以先假设要复制8位1hOffh数据(因为我们肉眼就可以看出此 程序的长度不可能大于 0ffh 个字节 )的字节数 (如: 1 0h) ,把程序补 全,以便通过编译。这时我们以准确的第一空所填内容 code 与假想 的第二空内容 10h 将程序补充完整并将其编译、连接、运行,接着 进行 debug ,在 debug 时我们可用 r 命令查看 cx 的值,这时我们 可以看到ex的值为1d,由此我们可以算出该程序的长度 1dh-5h=18h ,之所以减 5 是为了满足题目的要求 (因为 mov ax,4e00h/int 21h 这两条指令的长度等于 5)第六章 包含多个段

    10、的程序检测点 6.1(第 119 页) (1 )assume es:eodesg eodesg segment dw0123h,0456h,0789h,0abeh,0defh,0fedh,0ebah,0987hstart: mov ax,0mov ds,ax mov bx,0mov cx,8 s: mov ax,bxmov cs:bx,ax ; 此条指令为所填指令 add bx,2 loop s mov ax,4c00h int 21h codesg ends end start (2) assume cs:codesg codesg segment dw 0123h,0456h,0789h,

    11、0abch,0defh,0fedh,0cbah,0987hdw 0,0,0,0,0start: mov ax,cs ;cs 为所填第一空 mov ss,axmov sp,1ah ; 此条指令为所填第二空 mov ax,0 mov ds,ax movbx,0mov cx,8s:push bxpop cs:bx ; 此条指令为所填第三空add bx,2 loop s mov ax,4c00hint 21hcodesg ends end start实验 5 编写、调试具有多个段的程序 (第 123 页) (1) 1. 保持不变 2.考虑不同机子环境不同,答案无法统一 3.x-2 , x-1 (2)

    12、1. 保持不变2.考虑不同机子环境不同,答案无法统一 3.x-2 ,x-14.(n/16+1)*16 说明: n/16 只取整数部分 (3) 1. 保持不变 2. 考虑不同机子环境不同,答案无法统一 3.x+3 ,x+44(4)答:第 3个仍然可以正确执行。因为如果把 end 指令后的标号 start 去掉后,编译器便会顺序执行程序。换句话说:当未给编译器 预先的通知,要求其从哪开始执行程序时,编译器就自动以至上向 下的顺序进行编译执行源 loop s1mov ax,bmov es,axmov ds,ax 程序。(5) 完整程序如下:assume cs:code a segment db 1,

    13、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 es,ax mov ax,c mov ds,ax mov bx,0 mov cx,8 s1:mov ax,es:bx add bx,ax add bx,2 mov bx,0mov cx,8 s2:mov ax,es:bx add bx,ax add bx,2 loop s2 mov ax,4c00h int 21h code ends end st

    14、art (6)完整程序如下: assume cs:code a segment dw 1,2,3,4,5,6,7,8 a ends b segment dw 0,0,0,0,0,0,0,0 b ends code segment start: mov ax,b mov ss,ax 5篇二:汇编语言课后习题答案 王爽主编】一个值为 0 的字节,找到后,将它的偏移地址存储在 dx 中。 assume cs:code code segment start: mov ax,2000h mov ds,axmov bx,0s: mov ch,0 mov cl,bx jcxz ok; 当 cx=0 时, c

    15、s:ip 指向 okinc bx jmp short s ok: mov dx,bx mov ax ,4c00h int 21h code ends end start 检测点 9.3补全编程,利用 loop 指令,实现在内存 2000h 段中查找第一个值 为 0 的字节,找到后,将它的偏移地址存储在 dx 中。assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s:mov cl,bx mov ch,0 inc cx inc bx loop s ok:dec bx mov dx,bx mov ax,4c00h i

    16、nt 21h code ends end start 书 p101 ,执行 loop s 时,首先要将 (cx) 减 1 。 “loop 标号”相当于 dec cxif(cx) 丰 0) jmp short标号检测点 10.1 补全程序,实现从内存 1000 : 0000 处开始执行指令。assume cs:code stack segment db 16 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax, 1000h mov ax,0 push ax retf code ends en

    17、d start 执行 reft 指令时,相当于进行: pop ip pop cs 根据栈先进后出原则,应先将段地址 cs 入栈,再将偏移地址 ip 入 栈。检测点 10.3 下面的程序执行后, ax 中的数值为多少? 内存地址机器码 汇编指令执行后情况 1000:0 b8 00 00 mov ax,0 ax=0,ip 指向 1000:3 1000: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=8h add ax,ax ax=10h pop bx bx

    18、=1000h add ax,bx ax=1010h 用 debug 进行跟踪确认, “ call far ptr s 是先”将该指令后的第一个 字节段地址 cs=1000h 入栈,再将偏移地址 ip=8h 入栈,最后转到 标号处执行指令。出栈时,根据栈先进后出的原则,先出的为 ip = 8h,后出的为cs =1000h检测点 10.4下面的程序执行后, ax 中的数值为多少? 内存地址机器码 汇编指令 执行后情况1000:0 b8 06 00mov ax,6 ax=6,ip 指向 1000:31000:3 ff d0call ax pop ip,ip 指向 1000:61000:5 40inc

    19、 ax1000:6 58mov bp,spbp=sp=fffehadd ax,bp ax=6+ds:(fffeh)=6+5=0bh用 debug 进行跟踪确认, “ call ax(16 位 reg) ”是先将该指令后的第 一个字节偏移地址 ip 入栈,再转到偏移地址为 ax(16 位 reg) 处执行 指令。检测点 10.5 (1)下面的程序执行后, assume cs:code stack segment dw 8 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ds,ax mov ax

    20、,0 call word ptr ds:0eh inc ax inc ax mov ax,4c00h int 21h code ends end start 推算: 执行 call word ptr ds:0eh 最后 ip 转移到 (ds:0eh) ax=3ax 中的数值为多少?指令时,先 cs 入栈,再 ip=11 入栈, (ds:0eh)=11h ,执行 inc ax? 最终题中特别关照别用 debug 不住去试试,看是什么结果。 根据单步跟踪发现,执行 call word ptr ds:0eh 指令时,显示跟踪,跟踪结果不一定正确,但还是忍ds:0eh = 065d。ds:0000ds

    21、:0010 不是已设置成 stack 数据段了嘛,不是应该全都 是 0 的嘛。于是进行了更详细的单步跟踪,发现初始数据段中数据确实为 0,但执行完 mov ss,ax ; mov sp,16 这两条指令后,数据段中数据发 生改变。这是为什么呢?中断呗 检测点 10.5( 2)下面的程序执行后, ax 和 bx 中的数值为多少? assume cs:codesgstack segment dw 8 dup(0) stack ends codesg segment start: mov ax,stack mov ss,ax mov sp,10h mov word ptr ss:0,offset s

    22、 ;(ss:0)=1ah mov ss:2,cs ;(ss:2)=cscall dword ptr ss:0 ;cs 入栈 ,ip=19h 入栈 , 转到 cs:1ah 处执行指 令;(ss:4)=cs,(ss:6)=ip nops: mov ax,offset s ;ax=1ah sub ax,ss:0ch ;ax=1ah-(ss:0ch)=1ah-19h=1mov bx,cs ;bx=cs = 0c5bhsub bx,ss:0eh ;bx=cs-cs=0 mov ax,4c00hint 21h codesg ends end start c:docume1admini1debug jc10

    23、-5.exe -u0c5b:0000 b85a0c mov ax,0c5a0c5b:0003 8ed0 mov ss,ax0c5b:0005 bc1000 mov sp,00100c5b:0008 36ss:0c5b:0009 c70600001a00 mov word ptr 0000,001a0c5b:000f 36ss:0c5b:0010 8c0e0200mov 0002,cs0c5b:0014 36ss:0c5b:0015 ff1e0000call far 00000c5b:0019 90nop0c5b:001a b81a00 mov ax,001a0c5b:001d 36ss:0c5

    24、b:001e 2b060c00sub ax,000c -u0c5b:0022 8ccb mov bx,cs0c5b:0024 36ss:0c5b:0025 2b1e0e00sub bx,000e 0c5b:0029 b8004c mov ax,4c00 课程设计一将实验 7 中的 power idea 公司的数据按照图所示的格式在屏幕上 显示现来 table segmentdb 1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990,1991,1992 db 1993,1994,199

    25、5 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197 514 dd 345980,590827,803530,1183000,1843000,2795000,3753000,4649 000,5937000 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8 226 dw 11542,14430,15257,17800 dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,

    26、224, 239 dw 260,304,333 table ends data segment db 32 dup (0) data ends code segment start: mov ax,data mov ds,ax mov ax,table mov es,ax mov bx,0 mov si,0 mov di,0 mov cx,21mov dh,2 mov dl,30 g: push cx push dx mov ax,es:bx mov si,ax mov ax,es:bx.2 mov si.2,ax ; 年份入 ds:si add si,6 mov ax,es:bx.84 mo

    27、v dx,es:bx.86 call dtoc2 ; 收入转成十进制字符入 ds:si add si,10 mov ax,es:di.168 mov dx,0 call dtoc2 ; 人员数转成十进制字符入 ds:si add si,6 mov ax,es:di.210 mov dx,0 call dtoc2 ; 人均收入转成十进制字符入 ds:si mov si,0 ; 设置 ds:si 指向需显示字符首地址 b: mov cx,29 c: push cx mov cl,si jcxz f ;(ds:si)=0 转到 f 执行 d: inc si pop cx loop c inc si

    28、mov al,0mov si,al ; 设置结尾符 0mov si,0 ; 设置 ds:si 指向需显示字符首地址 pop dx mov cl,2 call show_stradd bx,4 ;dword 数据指向下一数据单元 add di,2 ;word 数据指向下一数据单元 add dh,1 ; 指向显存下一行 pop cxloop gmov ax,4c00hint 21h f: mov al,20h mov si,al ;(ds:si)=0 的数据改成空格 jmp d; 名称: dtoc2; 功能:将 dword 型数据转变为表示十进制的字符串,字符串以 0 为结尾符。 ; 参数: (a

    29、x)=dword 型数据的低 16 位; ;(dx)=dword 型数据的高 16 位;;ds:si 指向字符串首地址。; 返回:无。dtoc2:push axpush bxpush cxpush dx push si push di mov di,0 d20: mov cx,10 ; 除数为 10 call divdwadd cx,30h ; 余数 +30h ,转为字符push cx ; 字符入栈inc di ; 记录字符个数 mov cx,axjcxz d21 ; 低位商 =0 时,转到 d21 检测高位商jmp d20d21: mov cx,dxjcxz d22 ; 高低位商全 =0 时

    30、,转到 d22 执行jmp d20d22: mov cx,did23: pop ax ; 字符出栈 mov si,al inc si ;ds:si 指向下一单元 loop d23mov al,0mov si,al ; 设置结尾符 0pop dipop sipop dxpop cxpop bxpop axret【篇三:汇编语言 (王爽 )_第二版 _课后题全 _答案 23 】terminated normally-q实验 4 bx 和 loop 的使用 (3)下面的程序功能是将 “mov ax,4c00h 之前的指令复制到内存 0:200 处,补全程序。上机调试,跟踪运行结果。assume cs

    31、:codecode segment 或 mov ds,axmov ax,0020hmov es,axmov bx,0 或或 sub cx,5s: mov al,bxmov es:bx,alinc bx loop s mov ax,4c00h int 21h code ends end 此题有多个答案,因为 mov 用在寄存器之间传送数据的指令是 2 个字节,用在寄存器和立即数之间是 3 个字节答案 1:mov ax,cs ( 占 2 个字节 )mov cx,17答案 2:mov ax,code ( 占 3 个字节 )mov cx,18答案 3:mov ax,cs 或 mov ax,code把改成 sub cx,5( 因为在载入程序时 ,cx 保存程序的长度 ,减去 5 是为减去 mov ax,4c00h 和 int 21h 的长度 )此题的目的是 :


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开