汇编语言(王爽)第三版检测点答案(带目录)

合集下载

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

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

汇编语言答案检测点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个字节单元中)处。

汇编语言(王爽第三版)检测点

汇编语言(王爽第三版)检测点

汇编语⾔(王爽第三版)检测点这本书购于2015.11.30,我⼤概从2016.3⽉开始读,历时⼤概三个⽉,我们学校开《微机原理与汇编语⾔》这门课,不过让⼈感觉很不爽,课本⼀开始就丢给你⼀堆东西,意欲让你记住这⼀⼤堆东西,然后开始编程,我对编程语⾔的学习⽅⾯要求⽐较⾼,所以开始读这本王爽⽼师写的汇编语⾔,⽬前为⽌,这本书给我的感觉就是,你能学到很多底层的东西,尤其是像键盘的读写原理,屏幕的显⽰,特别是对内存的操作和管理,不像课本上给你⼀个中断让你就能显⽰字符之类的,它会⼀步⼀步教你怎么把要显⽰的东西写到显存⾥⾯,这本书显得⽐较浅显易懂,让⼈感觉不错,特别是读了这本书再去看那些难度较⾼的汇编代码及微机原理,效率会⾼很多,下⾯是我读这本书的过程中对书中检测点的解答,仅代表个⼈观点。

第⼀章检测点1.11) 13 (8kb = 8 * 1024 = 2^13) 2) 1024010233) 8*10241024 (1 byte = 8 bit,计算机以byte为存储单位)4) 1024^31024^210245) 2^612^42^2 (kb = 2^10 Mb = 2^20 Gb = 2^30)6) 112247) 512256 (8086的寄存器为16位寄存器,⼀次可以读取两个字节,80386为32位寄存器)8) ⼆进制第⼆章检测点2.11)AX = F4A3hAX = 31A3hAX = 3123hAX = 6246hBX = 826ChCX = 6246hAX = 826ChAX = 04D8hAX = 0482hAX = 6C82hAX = D882hAX = D888hAX = D810hAX = 6246h2)mov ax,2add ax,axadd ax,axadd ax,ax检测点2.21)00010h 1000fh(0001h+0000h 0001h+ffffh)2)1001h 2000h(偏移地址的范围为0000-ffff,内存单元=段地址*16+偏移地址,当偏移地址最⼩时,段地址最⼤,偏移地址最⼤时,段地址最⼩)检测点2.34次修改IP,最后IP为0第三章检测点3.11)mov ax,1mov ds,axmov ax,[1000] AX = 2662hmov bx,[1001] BX = E626hmov ax,bx AX = E626hmov ax,[0000] AX = 2662hmov bx,[0002] BX = D6E6hadd ax,bx AX = FD48hadd ax,[0004] AX = 2C14hmov ax,0 AX = 0000hmov al,[0002] AX = 00E6hmov bx,0 BX = 0000hmov bl,[000C] BX = 0026hadd al,bl AX = 000Ch2)CS = 2000h,IP = 0,DS = 1000hmov ax,6622h AX = 6622hjmp 0ff0:0100h CS = 0ff0 IP = 0100hmov ax,2000h AX = 2000hmov ds,ax DS = 2000hmov ax,[0008] AX = C389hmov ax,[0002] AX = EA66hmov ax,6622h AX = 6622h数据和程序表达上没有区别,只跟存储的地⽅有关,存在数据段中即为数据,存在程序段中就是程序检测点3.21)mov ax,2000hmov ss,axmov sp,10h2)mov ax,1000hmov ss,axmov sp,0第六章检测点6.11)mov cs:[bx],ax2)cs26或1ahpop cs:[bx]第九章检测点9.11)db 8 dup (0)2)offset startcs3)CS = 0006h IP = 00BE检测点9.2mov cl,[bx]mov ch,0jcxz okinc bx检测点9.3inc cx(因为loop s执⾏时是先将cx减⼀再与0⽐较)第⼗章检测点10.110000000检测点10.2ax = 3检测点10.3ax = 1006检测点10.4ax = 9(call ax时将IPpush到栈中,也就是push 3)检测点10.51)ax = 32)ax = 0001 bx = 0000第⼗⼀章检测点11.111011011011000001001000011000110010000100110111 1 0 1 11 0 0 0 01 0 0 0 00 1 1 0 1检测点11.31)jna s0jna s02)jb s0jb s0检测点11.4ax = 0871h检测点12.11)039D:00162)0000:[4N]0000:[4N+2]检测点13.1assume cs:code,ds:datadata segmentdb 'conversation',0data endscode segmentstart:mov ax,csmov ds,axmov si,offset showmov ax,0mov es,axmov di,200hmov cx,offset showend-offset showcldrep movsbmov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,datamov ds,axmov si,0mov ax,0b800hmov es,axmov di,12*160s:cmp byte ptr [si],0je okmov al,[si]mov es:[di],almov al,2mov es:[di+1],alinc siadd di,2mov bx,offset s-offset okint 7chok:mov ax,4c00hint 21hshow:push bpmov bp,spadd [bp+2],bxpop bpiretshowend:nopcode endsend start检测点13.21)错误,不能向BIOS中写程序2)错误,19h中断在操作系统以前,⽽DOS由操作系统控制即在操作系统以后1)mov al,2out 70h,alin al,71h2)mov al,0out 71h,almov al,2in 70h,al检测点14.2在不考虑溢出的情况下:mov ax,__mov bx,axshl bx,1mov cl,3shl ax,cladd ax,bx第⼗五章检测点15.11)pushfcall dword ptr ds:[0]2)在中断向量表中设置新的int9中断⼊⼝地址的时候不让其发⽣中断,即climov word ptr es:[9*4],offset int9mov word ptr es:[9*4+2],cssti恢复中断向量表int9的源地址时同理:clipush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]sti第⼗六章检测点16.1a[si]bb1检测点16.2mov ax,datamov es,ax第⼗七章检测点17.1IF = 1 DI(disable interupt)IF = 0 EI(enable interupt)当执⾏int16中断时是从缓冲区中读出字符,若缓冲区为空,则int16应该可以响应int9的中断,故IF不⼀定为1。

汇编语言王爽第三版检测点答案带目录

汇编语言王爽第三版检测点答案带目录

汇编语言王爽第三版检测点答案带目录在学习汇编语言的过程中,王爽老师的《汇编语言(第三版)》无疑是一本备受推崇的经典教材。

而对于学习者来说,检测点的答案能够帮助我们更好地巩固知识,查漏补缺。

接下来,我将为大家详细呈现这本教材中各个章节检测点的答案,并附上清晰的目录,方便大家查阅和学习。

第一章基础知识检测点 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:编写一个汇编程序,将AX寄存器的值加1。

答案:```INC AX```习题2:编写一个程序段,将DX寄存器的值移动到AX寄存器。

答案:```MOV AX, DX```习题3:假设有一个数组存储在内存中,数组的起始地址为DS:BX,数组元素为16位整数,编写一个程序段,将数组的第一个元素加到AX 寄存器。

答案:```MOV AX, [BX] ; 将数组的第一个元素移动到AXADD AX, [BX] ; 将数组的第一个元素加到AX```习题4:编写一个程序,实现对一个字符串的逆序存储。

答案:```; 假设字符串以0结尾,存放在内存中,DS:SI指向字符串的起始地址MOV CX, 0 ; 初始化计数器LODSW ; 将字符串的一个字节加载到AX中CMP AX, 0 ; 检查是否为字符串的结束字符JE END_REVERSE ; 如果是,则跳转到结束标签PUSH AX ; 将当前字符压入堆栈INC CX ; 增加计数器JMP SHORT LODSW ; 继续加载下一个字符END_REVERSE:; 现在堆栈中存储了逆序的字符,将它们重新存储到内存中MOV BX, CX ; 将计数器的值移动到BX中MOV CX, BX ; 将BX的值再次移动到CX中,用于字符串的逆序输出POP AX ; 从堆栈中弹出字符STOSW ; 将字符存储到内存中LOOP END_REVERSE ; 重复直到CX为0```习题5:编写一个程序,计算AX寄存器中值的平方。

汇编语言(王爽第三版)实验5编写、调试具体多个段的程序

汇编语言(王爽第三版)实验5编写、调试具体多个段的程序

汇编语⾔(王爽第三版)实验5编写、调试具体多个段的程序实验5 编写、调试具体多个段的程序⼀。

将下⾯的程序编译连接,⽤Debug加载、跟踪,然后回答问题。

assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode endsend start程序分析:由于是初次接触,我们逐步讲解,废话多点。

(1)此程序考察的是内存中数据段和栈段的定义。

程序共定义了1个数据段,data段,⾸先明确,在程序运⾏开始(标号start处),这个数据段就已经被定义好了,并且分配了内存空间,并赋值了。

⼀个栈段,stack。

同理这个数据段在没有被⼈⼯定义为栈结构时,也被定义好了。

并且分配了内存空间,并赋值了。

将此程序编译并连接后,使⽤debug调试,(这⾥需要注意,以下的段地址可能由于系统不同⽽有差异,主要是理解概念。

)E:\assembly>debug eee.exe-rAX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B55 ES=0B55 SS=0B65 CS=0B67 IP=0000 NV UP EI PL NZ NA PO NC0B67:0000 B8660B MOV AX,0B66程序分析:我们什么也没执⾏,此时我们在data段定义的数据在哪?在ds:0100H处(原来讲过,程序最开始时ds:00~ds:100H是留给程序与操作系统通讯使⽤的psp内存段,参见书中p92);也就是说我们在ds:100H、0B55:100H或0B65:00处可以看见这些定义的数据。

汇编语言第三版(王爽)实验七

汇编语言第三版(王爽)实验七
add si,2 add di,16 loop s2
;人均收入 mov cx,21
mov si,0 s3: mov dx,es:[si+7] mov ax,es:[si+5] mov bx,es:[si+10] div bx
mov es:[si+13],ax mov al,' ' mov es:[si+15],al
s1: mov ax,[si] mov es:[di],ax
mov ax,[si+2] mov es:[di+2],ax mov al,' ' mov es:[di+4],al
add si,4 add di,16 loop s1
;员工数 mov cx,21
mov si,168 mov di,10
s2: mov ax,[si] mov es:[di],ax mov al,' ' mov es:[di+2],al
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
登录后才能查看或发表评论立即登录或者逛逛博客园首页
实验内容
汇编语言第三版(王爽)实验七s:codesg,ds:data data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

汇编语言第三版(王爽)9-1.1

汇编语言第三版(王爽)9-1.1

⑴一个CPU的寻址能力为8KB,那么它的地址总线宽度为:13解析:1KB=1024B --> 8KB=8*1024B=23*210B=213B,也就是说,假设将每一个存储单元(1B=8bit)理解成一个房间,那么213B也就是说能找到213这么多个的房间数,房间编号从0--213-1 213就是CPU的寻址能力,也可以说是CPU寻址空间大小。

既然CPU能找到这么多种编号的房间,每一根线能传输0或者1也就是有213中可能,也就是说有13根地址总线,因此它的地址总线宽度为13。

假设将8KB改8Kb,1Kb = 1024 b,8kb = 1024 * 8 b=1024 Byte= 210=1024字节,所以地址总线宽度为10⑵1KB的存储器有1024个存储单元,存储单元的编号从0到1023解析:1个存储单元是8bit,即1Byte(字节),1字节就是一个存储单元,根据换算关系,1KB=1024B,即1KB有1024个存储单元,存储单元的编号都是从0开始编起,若有n根地址总线编号就从0到2n-1,假设地址总线有3根,那么能表示不同的标号情况有000,001,010,011,100,101,110,111。

即有这8种情况,对应的十进制为0-7。

(3)1KB的存储器可以存储1024*8个bit,1024个Byte解析:1B=8bit,1KB=1024B;那么1024B=1024*8bit(4)1GB、1MB、1KB分别是230220210个Byte解析:根据换算关系1GB=1024MB=1024*1024KB=1024*1024*1024Byte,1MB=1024KB=1024*1024Byte,1KB=1024B。

(5)8080、8088、80286、80386的地址总线宽度分别为16根,20根,24根、32根 ,则它们的寻址能力分别为:26(KB )、1(MB )、24(MB )、4(GB )解析:8080的寻址能力大小为216B ,转换为KB 就是26KB ,8088的寻址空间大小为220B=210KB=1MB ,80286的寻址能力为224B=214KB=24MB ,80386的寻址空间大小为232B=222KB=212MB=4GB(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根,则它们一次可以传送的数据为1(B )、1(B )、2(B )、2(B )、4(B )解析:传送的数据可分为有符号和无符号的,如果是有符号的,那么最高位0代表在正数,为1代表负数。

汇编语言(王爽第三版)实验3编程、编译、连接、跟踪

汇编语言(王爽第三版)实验3编程、编译、连接、跟踪

汇编语⾔(王爽第三版)实验3编程、编译、连接、跟踪实验3 编程、编译、连接、跟踪(1)将下⾯的程序保存为t1.asm⽂件,将其⽣产可执⾏⽂件t1.exe。

assume cs:codesgcodesg segmentmov ax, 2000Hmov ss, axmov sp, 0add sp, 10pop axpop bxpush axpush bxpop axpop bxmov ax, 4C00Hint 21Hcodesg endsend(2)⽤debug跟踪t1.exe的执⾏过程,写出每⼀步骤执⾏后,相关寄存器中的内容和栈顶的内容。

(3)PSP的头两个字节是CD 20,⽤debug加载t1.exe,查看PSP的内容。

实验结果:【1】编译、连接t1.asm汇编源程序。

1)在windows XP中,打开cmd窗⼝,编译t1.asm程序。

如下图:E:\assembly>masm t1.asmMicrosoft (R) MASM Compatibility DriverCopyright (C) Microsoft Corp 1993. All rights reserved.Invoking: ML.EXE /I. /Zm /c /Ta t1.asmMicrosoft (R) Macro Assembler Version 6.15.8803Patched for you by promethee [ECL] in the year 2001 - enjoyCopyright (C) Microsoft Corp 1981-2000. All rights reserved.Assembling: t1.asm如果没有任何错误,编译器会⽣成⼀个t1.obj的⽂件。

如果有语法等严重的错误,编译器会给出错误信息,你可以根据错误信息,修改源代码相关的⾏。

连接这个obj⽂件,并⽣成t1.exe⽂件:如下图:E:\assembly>link t1.objMicrosoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994Copyright (C) Microsoft Corp 1984-1993. All rights reserved.Run File [t1.exe]: t1.exeList File [nul.map]:Libraries [.lib]:Definitions File [nul.def]:LINK : warning L4021: no stack segmentLINK : warning L4038: program has no starting address连接讲解:1)其中运⾏⽂件:我们输⼊我们将要⽣成的可执⾏程序(例如.exe)⽂件的名称。

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