汇编语言王爽课后答案
汇编语言实验答案 (王爽)

汇编语言答案检测点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次方)检测点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个字节单元中)处。
汇编语言(王爽)_第二版_课后题全_答案15

AX=00E6 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0001 ES=0DB4 SS=0DB4 CS=0DB4 IP=0124 NV UP EI PL NZ AC PE CY0DB4:0124 8A1E0C00 MOV BL,[000C] DS:000C=26-tAX=00E6 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0001 ES=0DB4 SS=0DB4 CS=0DB4 IP=0128 NV UP EI PL NZ AC PE CY0DB4:0128 00D8 ADD AL,BL-tAX=000C BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0001 ES=0DB4 SS=0DB4 CS=0DB4 IP=012A NV UP EI PL NZ NA PE CY0DB4:012A C6061799FF MOV BYTE PTR [9917],FF DS:9917=9A-q检测点3.1(2)内存中的情况如图3.6所示各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;①写出CPU执行的指令序列(用汇编指令写出)。
②写出CPU执行每条指令后,CS、IP和相关寄存器的数值。
③再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?图3.6内存情况示意检测点3.2(1)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH 中。
汇编语言王爽第三版检测点答案带目录

汇编语言王爽第三版检测点答案带目录在学习汇编语言的过程中,王爽老师的《汇编语言(第三版)》无疑是一本备受推崇的经典教材。
而对于学习者来说,检测点的答案能够帮助我们更好地巩固知识,查漏补缺。
接下来,我将为大家详细呈现这本教材中各个章节检测点的答案,并附上清晰的目录,方便大家查阅和学习。
第一章基础知识检测点 11(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为。
答案:13 位。
因为 8KB = 8×1024 = 2^13B,所以地址总线的宽度为 13 位。
检测点 12(1)8086 CPU 有根数据总线。
答案:16 根。
(2)8086 CPU 有根地址总线。
答案:20 根。
检测点 13(1)内存地址空间的大小受的位数决定。
答案:地址总线。
(2)8086 CPU 的地址总线宽度为 20 位,其可以寻址的内存空间为。
答案:1MB。
因为 2^20 = 1048576B = 1MB。
第二章寄存器检测点 21(1)写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX = 62627mov ah,31H AH = 31H,AX = 31627mov al,23H AL = 23H,AX = 3123H检测点 22(1)给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为到。
答案:00010H 到 1000FH。
(2)有一数据存放在内存 20000H 单元中,现给定段地址为 SA,若想用偏移地址寻到此单元。
则 SA 应满足的条件是:最小为,最大为。
答案:最小为 1001H,最大为 2000H。
第三章内存访问检测点 31(1)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。
完成程序。
assume cs:codesgcodesg segmentdw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987Hstart: mov ax,0mov ds,axmov bx,0mov cx,8s: mov ax,bxmov bx+16,axadd bx,2loop smov ax,4c00hint 21hcodesg endsend start检测点 32(1)下面的程序将“Mov ax,4c00h ”之前的指令复制到内存 0:200 处。
汇编语言王爽第二版课后答案培训资料

汇编语言王爽第二版课后答案第一章基础知识检测点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。
汇编语言(王爽)_第二版_课后题全_答案11

AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0005 NV UP EI PL NZ NA PO NC2000:0005 EBFC JMP 0003-tAX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0003 NV UP EI PL NZ NA PO NC2000:0003 01C0 ADD AX,AX-q实验一查看CPU和内存,用机器指令和汇编指令编程(3) 查看内存中的内容PC主板上的ROM中有个一出产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个出产日期并试图改变它。
Microsoft(R) Windows DOS(C)Copyright Microsoft Corp 1990-2001.C:\DOCUME~1\ADMINI~1>debug-d ffff:0 fFFFF:0000 EA 5B E0 00 F0 31 32 2F-32 35 2F 30 37 00 FC 59 .[...12/25/07..Y-q地址C0000~FFFFF的内存单元为只读存储器,写入数据操作是无效的。
因此出产日期无法改变。
下面内容摘自于网上还有另一种情况,如果你发现你能修改ROM中的生产日期,那么原因如下:每个计算机的结构都不一样,教材考虑的是普通8086PC机上的效果,个别计算机的效果可能不同。
也就是说在你的计算机中这个内存是可修改的所以,认为所有的计算机某些地址的内存不能修改是片面的。
书上说rom是只读的你就不去验证了吗?如何验证呢?我觉得这个实验最大的好处不是让我们验证了这个知识点,而是提醒我们要有怀疑的精神,怀疑之后再去验证才能跟深刻的理解知识,提升自己的能力,甚至还会发现有些书上描述的不准确甚至错误的地方。
汇编语言王爽课后答案

汇编语言王爽课后答案【篇一:汇编语言课后习题答案王爽主编】一个值为 0 的字节,找到后,将它的偏移地址存储在assume cs:codecode segmentstart: mov ax,2000hmov ds,axmov bx,0s: mov ch,0 mov cl,[bx] jcxz ok;当cx=0 okinc bxjmp short sok: mov dx,bxmov ax ,4c00hint 21hcode endsend start dx 中。
时, cs:ip 指向检测点 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 cscs 入栈,再将偏移地址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 入栈,最后转到标号处执行指令。
汇编语言(王爽)_第二版_课后题全_答案9

0C1C:0117 00DC ADD AH,BL-tAX=2640 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0119 NV UP EI PL NZ NA PO NC0C1C:0119 00C7 ADD BH,AL-tAX=2640 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011B NV UP EI PL NZ NA PO NC0C1C:011B B400 MOV AH,00-tAX=0040 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011D NV UP EI PL NZ NA PO NC0C1C:011D 00D8 ADD AL,BL-tAX=0066 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011F NV UP EI PL NZ NA PE NC0C1C:011F 049C ADD AL,9C-tAX=0002 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0121 NV UP EI PL NZ AC PO CY0C1C:0121 D3990075 RCR WORD PTR [BX+DI+7500],CL DS:B526=0000-q实验一查看CPU和内存,用机器指令和汇编指令编程(2)将下面的3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
汇编语言 第二版 王爽 完整答案

第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)查看内存中的内容。
汇编语言王爽第三版课后答案

汇编语言王爽第三版课后答案【篇一:汇编语言王爽第二版课后答案】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的值。
情况如下:第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. 在汇编语言中,用于定义数据的指令是: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。
汇编语言王爽第二版课后答案

s:
push [bx]
pop cs:[bx] 空
;此条指令为所填第三
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
实验 5 编写、调试具有多个段的程序(第 123 页)
----------------------------------------
提示:此题可在 DEBUG 中利用 E 命令在本机上按照 题目中所给出的内存单元及其数据进行相应地修 改,然后再用 A 命令进行写入(题目中所给出的)相 应的汇编指令,最后再进行 T 命令进行逐步执行, 以查看相应结果。
1
汇编语言课后答案
(2) 1.指令序列如下: mov ax,6622h jmp 0ff0:0100 mov ax,2000h mov ds,ax mov ax,[0008] mov ax,[0002]
注意: 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
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
汇编语言王爽第三版检测点答案带目录

汇编语言王爽第三版检测点答案带目录一、前言在学习汇编语言的过程中,王爽老师的《汇编语言》第三版是一本备受推崇的教材。
为了帮助大家更好地掌握这门语言,下面将为大家提供一份详细的检测点答案,并附上目录,以便大家能够快速找到所需内容。
二、目录1、基础知识11 数制与编码12 内存地址空间2、寄存器21 通用寄存器22 段寄存器3、指令系统31 数据传送指令32 算术运算指令33 逻辑运算指令34 转移指令4、内存寻址41 直接寻址42 寄存器间接寻址43 基址变址寻址44 相对基址变址寻址5、程序设计51 顺序程序设计52 分支程序设计53 循环程序设计6、中断与 BIOS 调用61 中断概念62 BIOS 调用三、检测点答案1、基础知识11 数制与编码检测点 11:将十进制数 123 转换为十六进制数。
答案:7B检测点 12:已知一个字节的二进制数为 10101100,求其对应的十进制数。
答案:17212 内存地址空间检测点 13:若内存地址从 0000H 到 7FFFH,其存储容量是多少?答案:32KB检测点 14:内存地址空间中,某段地址范围为 2000H 2FFFH,该段地址空间有多少字节?答案:4KB2、寄存器21 通用寄存器检测点 21:在 8086 CPU 中,AX 寄存器可以分为哪两个 8 位寄存器?答案:AH 和 AL检测点 22:已知 AX = 1234H,BX = 5678H,执行 ADD AX, BX 后,AX 的值是多少?答案:68ACH22 段寄存器检测点 23:CS 寄存器的作用是什么?答案:CS 寄存器用于存放代码段的段地址。
检测点 24:若代码段的段地址为 1000H,偏移地址为 2000H,那么物理地址是多少?答案:12000H3、指令系统31 数据传送指令检测点31:MOV AX, 1000H 指令执行后,AX 寄存器的值是多少?(假设内存单元 1000H 的值为 5678H)答案:5678H检测点 32:已知 AX = 1234H,BX = 5678H,执行 MOV 2000H, AX 后,内存单元 2000H 的值是多少?答案:1234H32 算术运算指令检测点 33:若 AX = 1000H,BX = 2000H,执行 ADD AX, BX 后,AX 和 CF 的值分别是多少?答案:AX = 3000H,CF = 0检测点 34:已知 AX = 5678H,执行 INC AX 后,AX 的值是多少?答案:5679H33 逻辑运算指令检测点 35:若 AX = 1234H,执行 AND AX, 0F0FH 后,AX 的值是多少?答案:0204H检测点 36:已知 AX = 5678H,执行 OR AX, 0F000H 后,AX 的值是多少?答案:5678H | 0F000H = 5F78H34 转移指令检测点 37:JMP 指令有几种跳转方式?答案:无条件跳转和条件跳转。
汇编语言_王爽_详细答案

第一章检测点1.11) 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) 二进制注:符号'^'指求幂运算(如: 2^30指2的30次方)第二章检测点2.1(1)大家做这题的时候一定要注意,要看清楚数制,比如是二进制还是十进制,还是十六进,我当时没注意,做错了!!呵呵!!第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第十一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1)00010H 1000fH(2)0001H 2000H检测点2.3共修改了4次ip 第一次mov ax,bx 第二次是sub ax,ax 第三次是jmp ax 第四次是执行jmp ax 最后ip的值是0 因为ax的值是零!!检测点3.1(1)第一空:2662H第二空:E626H第三空:E626H第四空:2662H第五空:D6E6H第六空:FD48H第七空:2C14H第八空:0000H第九空:00E6H第十空:0000H第十一空:0026H第十二空:000CH注意:ax中存取的是字型数据,高地址存放高字节,低地址存放低字节!!(一定要小心)(2)①写出cpu的执行序列Mov ax,6622Jmp 0ff0:0100Mov ax,2000HMov ds,axMov ax ,[0008]Mov ax,[0002]②指令执行顺序寄存器CSDSAXBX初值2000H 00001000Hmov ax,6622h 2000H 00031000H 6622H 0000jmp 0ff0:0100 1000h00001000H 6622H 0000mov ax,2000h 1000H 00031000H 2000H 0000mov ds,ax 1000H 00052000H 2000H 0000mov ax,[0008] 1000H 00082000HC389H0000mov ax,[0002]1000H000B2000HEA66H0000③数据和程序在计算机中都是以二进制的形式存放的,在区别程序和数据时,关键是看段地址,如果段地址是ds段,说明该内存中存放的是数据,如果段地址是cs段,说明该内存中存放的是程序指令检测点3.2(1)Mov ax,2000HMov ss,axMov sp,0010H(2)Mov ax,1000HMov ss,axMov sp,0000H注意:出栈时和入栈时的顺序,空栈时栈顶指向的是最高端地址!栈满是栈顶指针指向的是最底端地址!!2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言王爽课后答案【篇一:汇编语言课后习题答案王爽主编】一个值为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入栈,最后转到标号处执行指令。
出栈时,根据栈先进后出的原则,先出的为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 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)下面的程序执行后,ax中的数值为多少?assume cs:codestack segmentdw 8 dup (0)stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ds,axmov ax,0call word ptr ds:[0eh]inc axinc axmov ax,4c00hint 21hcode endsend start推算:执行call word ptr ds:[0eh]指令时,先cs入栈,再ip=11入栈,最后ip转移到(ds:[0eh])。
(ds:[0eh])=11h,执行inc ax??最终ax=3题中特别关照别用debug跟踪,跟踪结果不一定正确,但还是忍不住去试试,看是什么结果。
根据单步跟踪发现,执行call word ptr ds:[0eh]指令时,显示ds:[0eh]=065d。
ds:0000~ds:0010不是已设置成stack数据段了嘛,不是应该全都是0的嘛。
于是进行了更详细的单步跟踪,发现初始数据段中数据确实为0,但执行完mov ss,ax;mov sp,16这两条指令后,数据段中数据发生改变。
这是为什么呢?中断呗~~~~检测点10.5(2)下面的程序执行后,ax和bx中的数值为多少?assume cs:codesgstack segmentdw 8 dup(0)stack endscodesg segmentstart:mov ax,stackmov ss,axmov sp,10hmov word ptr ss:[0],offset s ;(ss:[0])=1ahmov ss:[2],cs ;(ss:[2])=cscall dword ptr ss:[0] ;cs入栈,ip=19h入栈,转到cs:1ah处执行指令;(ss:[4])=cs,(ss:[6])=ipnops: mov ax,offset s ;ax=1ahsub ax,ss:[0ch] ;ax=1ah-(ss:[0ch])=1ah-19h=1mov bx,cs ;bx=cs=0c5bhsub bx,ss:[0eh] ;bx=cs-cs=0mov ax,4c00hint 21hcodesg endsend startc:\docume~1\admini~1debug jc10-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 [0000]0c5b:0019 90nop0c5b:001a b81a00 mov ax,001a0c5b:001d 36ss:0c5b: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 db1984,1985,1986,1987,1988,1989,1990,1991,1992 db1993,1994,1995dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197 514dd345980,590827,803530,1183000,1843000,2795000,3753000,4649 000,5937000 dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8 226 dw 11542,14430,15257,17800dw5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224, 239 dw 260,304,333table endsdata segmentdb 32 dup (0)data endscode segmentstart: mov ax,datamov ds,axmov ax,tablemov es,axmov bx,0mov si,0mov di,0mov cx,21mov dh,2mov dl,30g: push cxpush dxmov ax,es:[bx]mov [si],axmov ax,es:[bx].2mov [si].2,ax ;年份入ds:siadd si,6mov ax,es:[bx].84mov dx,es:[bx].86call dtoc2 ;收入转成十进制字符入ds:siadd si,10mov ax,es:[di].168mov dx,0call dtoc2 ;人员数转成十进制字符入ds:si add si,6x,es:[di].210mov dx,0call dtoc2 ;人均收入转成十进制字符入ds:si mov si,0 ;设置ds:si指向需显示字符首地址 b: mov cx,29c: push cxmov cl,[si]jcxz f ;(ds:si)=0转到f执行d: inc sipop cxloop cinc simov al,0mov [si],al ;设置结尾符0mov si,0 ;设置ds:si指向需显示字符首地址 pop dxmov cl,2call show_stradd bx,4 ;dword数据指向下一数据单元add di,2 ;word数据指向下一数据单元add dh,1 ;指向显存下一行pop cxloop gmov ax,4c00hint 21hf: mov al,20hmov [si],al ;(ds:si)=0的数据改成空格jmp d;名称:dtoc2;功能:将dword型数据转变为表示十进制的字符串,字符串以0为结尾符。
;参数:(ax)=dword型数据的低16位;;(dx)=dword型数据的高16位;;ds:si指向字符串首地址。
;返回:无。
dtoc2:push axpush bxpush cxpush dxpush sipush dimov di,0d20: mov cx,10 ;除数为10call divdwadd cx,30h ;余数+30h,转为字符push cx ;字符入栈inc di ;记录字符个数mov cx,axjcxz d21 ;低位商=0时,转到d21检测高位商jmp d20d21: mov cx,dxjcxz d22 ;高低位商全=0时,转到d22执行jmp d20d22: mov cx,did23: pop ax ;字符出栈mov [si],alinc si ;ds:si指向下一单元loop d23mov al,0mov [si],al ;设置结尾符0pop dipop sipop dxpop cxpop bxpop axret【篇二:《汇编语言》第二版习题答案(全) 王爽编写】1个cpu的寻址能力为8kb,那么它的地址总线的宽度为 13位。