汇编语言王爽第三版课后答案
【篇一:汇编语言王爽第二版课后答案】
lass=txt>----------------------
(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,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页) ----------------------
  答:cpu修改了4次ip的值。 情况如下:
汇编table指令什么意思 第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个字节单元中)处。此生产日期不能被改变,因为其具有‘只读’属性。(4)
通过向内存中的显存写入数据,使计算机根据写入的数据进行ascii转换,并将转换后且可打印的字符输出到屏幕上。注:关于显存的详细讨论不在此题范围
第三章 寄存器(内存访问) 检测点3.1(第52页) ----------------------
(1)(题目:略) 第一空:2662h 第二空:e626h 第三空:e626h 第四空:2662h 第五空:d6e6h 第六空:fd48h 第七空:2c14h 第八空:0000h 第九空:00e6h 第十空:0000h 第十一空:0026h 第十二空:000ch
提示:此题可在debug中利用e命令在本机上按照题目中所给出的内存单元及其数据进行相应地修改,然后再用a命令进行写入(题目中所给出的)相应的汇编指令,最后再进行t命令进行逐步执行,以查看相应结果。
1
  ax=5bea ax=5cca bx=30f0 bx=6029
sp=fe 220fe 5cca sp=fc 220fc 6029 sp=fe 6029 sp=100h 5cca
sp=fe 220fe 30f0 sp=fc 220fc 2e39
说明:此题可能因机子软、硬件环境不同而导致答案不一致!
  (2)仔细观察图3.19的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
答:因为用t指令进行调试时,会产生中断。而为了保护现场,cpu则先将标志寄存器进栈、再把当前cs的值进栈,最后将ip的值进栈。关于中断的详细内容的讨论不在此题范围
第五章 [bx]和loop指令
实验4 [bx]和loop的使用(第113页)
-------------------------------
(1) 编程,向内存0:200~0:23f依次传送数据0~63(3fh)。 程序如下: assume cs:codesg codesg segment
mov ax,0020h  mov ds,ax  mov bx,0  mov dl,0
mov cx,40h
inc dl  inc bx  loop s
mov ax,4c00h
2
int 21h
  mov bx,0
mov cx,18h;18h为所填写的数据
codesg ends end
(2) 编程,向内存0:200~0:23f依次传送数据0~63(3fh),程序中只能使用9条指令,9条指令中s:mov al,[bx]  mov es:[bx],al 包括“mov ax,4c00h”和“int 21h”。 程序如下: assum
e 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,4c00h
int 21h
codesg ends end
(3) 下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。 assume cs:code code segment  mov ax,code  ;code为所填写的数据  mov ds,ax  mov ax,0020h
mov es,ax
inc bx  loop s  mov ax,4c00h
int 21h
code ends end
提示:
1.因为题目的要求是把代码段内的指令当作数据,复制到目的地址。所以,源数据段ds和代码段cs相同,通过 mov ax,code/mov ds,ax (/符号是指两条指令的分隔)来设置源数据段。
2.可以先假设要复制8位[1h~0ffh]数据(因为我们肉眼就可以看出此程序的长度不可能大于0ffh个字节)的字节数(如:10h),把程序补全,以便通过编译。这时我们以准确的第一空所填内容code与假想的第二空内容10h将程序补充完整并将其编译、连接、运行,接着进行debug,在debug时我们可用r命令查看cx的值,这时我们可以看到cx的值为1d,由此我们可以算出该程序的长度
[1dh-5h]=18h,之所以减5是为了满足题目的要求(因为mov ax,4c00h/int 21h这两条指令的长度等于5)
第六章 包含多个段的程序
检测点6.1(第119页) ------------------- (1)
assume cs:codesg codesg segment
dw
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
3
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)
assume cs:codesg codesg segment
dw
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0
start:  mov ax,cs  ;cs为所填第一空  mov ss,ax
mov sp,1ah ;此条指令为所填第二空 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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。