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

合集下载

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

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

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

汇编语言第3版答案

汇编语言第3版答案

汇编语言第3版答案【篇一:汇编语言习题答案 (3)】一、选择题(四选一)1.表示一条处理器指令所在存储单元的符号地址是a 变量b 常量c 标号d 偏移量2.汇编语言中的变量有多种类型属性,但错误的类型是a 字节型byteb 字符型charc 字型wordd 双字型dword3.执行mov bx,seg var指令,bx得到变量var的。

a 物理地址b 段地址c 偏移地址d 内容4.masm语句中,采用a 逗号b 分号c 冒号d 空格5.欲设定从偏移地址100h开始安排程序,可使用a org 100hb start=100hc start db 100hd start equ 100h6.与“mov bx,offset var”指令等效的指令是a mov bx,varb 1ds bx,varc les bx,vard 1ea bx,var.7.下条语句buf db l0 dup(3 dup(?,10),3,10)汇编后,变量buf占有的存储单元字节数是 b 。

a 100b 80c 40d 208.数据定义语句“numl dw(12 or 6 and 2) ge 0eh”,定义的num1单元的内容是。

a 0b 0ffffhc 1d 0ffh9.要求将a、b两个字符的ascii码41h和42h顺序存放在连续两个字节存储单元中,可选用的语句是 a 。

a db`ab'b dw `ab'c db 0abhd dw 0abh10.在汇编语言程序中,对end语句叙述正确的是a end语句是一可执行语句b end语句表示程序执行到此结束c end语句表示源程序到此结束d end语句在汇编后要产生机器码11.下面的数据传送指令中,错误的操作是a mov ss:[bx+di],byte ptr 10hb mov dx,l000hc mov word ptr[bx],1000hd mov ds,2000h12.下面指令执行后,变量dab中的内容是daw dw 2a05hdab db 0fah?mov al,byte ptr dawsub dab,ala 0dahb 0fahc 0f5hd 0d0h13.根据下面的语句序列,ax寄存器的内容是。

汇编语言(王爽)_第二版_课后题全_答案15

汇编语言(王爽)_第二版_课后题全_答案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 中。

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

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

汇编语⾔(王爽第三版)检测点这本书购于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 处。

汇编语言课后习题答案 王爽主编

汇编语言课后习题答案 王爽主编

补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。

assume cs:codecode segmentstart: mov ax,2000hmov ds,axmov bx,0s: mov ch,0mov 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,0inc 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入栈,最后转到标号处执行指令。

汇编语言(王爽第三版)实验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处可以看见这些定义的数据。

汇编语言程序设计教程(第3版卜艳萍)参考答案

汇编语言程序设计教程(第3版卜艳萍)参考答案

汇编语⾔程序设计教程(第3版⼘艳萍)参考答案汇编语⾔程序设计教程(第3版)习题参考答案第1章汇编语⾔基础知识思考与练习1.计算机系统分哪⼏个层次?简述计算机系统的硬件结构。

1)数字逻辑层2) 微体系结构层3) 指令系统层4) 操作系统层5) 汇编语⾔层6) ⾼级语⾔层7) 应⽤层硬件系统是指构成计算机系统的物理实体或物理装置。

它由控制器、运算器、存储器、输⼊设备和输出设备等部件构成。

2.简述⽤汇编语⾔进⾏程序设计的必要性。

1)程序要具有较快的执⾏时间,或者只能占⽤较⼩的存储容量。

例如,操作系统的核⼼程序段,实时控制系统的软件,智能仪器仪表的控制程序等。

2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。

例如,I/O接⼝电路的初始化程序段,外部设备的低层驱动程序等。

3)⼤型软件需要提⾼性能、优化处理的部分。

例如计算机系统频繁调⽤的⼦程序、动态连接库等。

4)没有合适的⾼级语⾔或只能采⽤汇编语⾔的时候。

例如,开发最新的处理器程序时,暂时没有⽀持新指令的编译程序。

5)汇编语⾔还有许多实际应⽤,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。

3.汉字编码主要分哪⼏类?每类的功能如何?汉字编码主要分为四类:汉字输⼊码、汉字交换码、汉字机内码和汉字字形码。

1)为了能直接使⽤西⽂标准键盘进⾏输⼊,就必须为汉字设计相应的编码⽅法,即⽤西⽂标准键盘上的字母数字串表⽰汉字的编码。

⽬前,汉字输⼊编码⽅法主要有三种:数字编码、拼⾳编码和字形编码。

2)汉字交换码:在不同汉字信息处理系统间进⾏汉字交换时所使⽤的编码,就是国标码。

⽆论采⽤哪种⽅法输⼊汉字,⼀旦输⼊到计算机中,必须采⽤统⼀的国标码标识每个汉字。

3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字⽤的编码。

4)字形编码也称为字模码,是⽤点阵表⽰的汉字字形代码,它是汉字的输出形式。

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

汇编语言答案(王爽)第一章检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13位。

(2)1KB的存储器有1024个存储单元,存储单元的编号从0到1023。

(3)1KB的存储器可以存储8192(2^13)个bit,1024个Byte。

(4)1GB是1073741824(2^30)个Byte、1MB是1048576(2^20)个Byte、1KB是1024(2^10)个Byte。

(5)8080、8088、80296、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)在存储器中,数据和程序以二进制形式存放。

解题过程:(1)1KB=1024B,8KB=1024B*8=2^N,N=13。

(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。

(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。

(4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。

(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。

这样的CPU最多可以寻找2的N次方个内存单元。

(一个内存单元=1Byte)。

(6)8根数据总线一次可以传送8位二进制数据(即一个字节)。

(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。

(8)在存储器中指令和数据没有任何区别,都是二进制信息。

第二章检测点 2.1(1)写出每条汇编指令执行后相关寄存器中的值。

mov ax,62627AX=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,6AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H检测点2.1(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

mov ax,2AX=2add ax,ax AX=4add ax,ax AX=8add ax,ax AX=16检测点2.2(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为0010H 到1000FH。

解题过程:物理地址=SA*16+EAEA的变化范围为0h~ffffh物理地址范围为(SA*16+0h)~(SA*16+ffffh)现在SA=0001h,那么寻址范围为(0001h*16+0h)~(0001h*16+ffffh)=0010h~1000fh检测点2.2(2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。

则SA应满足的条件是:最小为1001H,最大为2000H。

当段地址给定为1001H以下和2000H以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。

解题过程:物理地址=SA*16+EA20000h=SA*16+EASA=(20000h-EA)/16=2000h-EA/16EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值EA取最小值时,SA=2000h-0h/16=2000h,SA为最大值检测点2.3下面的3条指令执行后,cpu几次修改IP?都是在什么时候?最后IP中的值是多少?mov ax,bxsub ax,axjmp ax答:一共修改四次第一次:读取mov ax,bx之后第二次:读取sub ax,ax之后第三次:读取jmp ax之后第四次:执行jmp ax修改IP最后IP的值为0000H,因为最后ax中的值为0000H,所以IP中的值也为0000H第三章检测点3.1(1)在DEBUG中,用"D0:0lf"查看内存,结果如下:0000:00007080F030EF6030E2-00808012662022600000:00106226E6D6CC2E3C3B-AB BA000026066688下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值mov ax,1mov ds,axmov ax,[0000]ax=2662Hmov bx,[0001]bx=E626Hmov ax,bx ax=E626Hmov ax,[0000]ax=2662Hmov bx,[0002]bx=D6E6Hadd ax,bx ax=FD48Hadd ax,[0004]ax=2C14Hmov ax,0ax=0mov al,[0002]ax=00e6Hmov bx,0bx=0mov bl,[000c]bx=0026Hadd al,bl ax=000CH检测点3.1(2)内存中的情况如图3.6所示各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;检测点3.2(1)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。

mov ax,1000Hmov ds,axmov ax,2000Hmov ss,axmov sp,10hpush[0]push[2]push[4]push[6]push[8]push[A]push[C]push[E]检测点3.2(2)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。

mov ax,2000Hmov ds,axmov ax,1000Hmov ss,axmov sp,0pop[e]pop[c]pop[a]pop[8]pop[6]pop[4]pop[2]pop[0]第六章检测点6.1(1)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:assume cs:codesgcodesg segmentdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h start:mov ax,0mov ds,axmov bx,0mov cx,8s:mov ax,[bx]mov cs:[bx],axadd bx,2loop smov ax,4c00hint21hcodesg endsend start检测点6.1(2)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。

栈空间设置在程序内。

完成程序:assume cs:codesgcodesg segmentdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw0,0,0,0,0,0,0,0,0,0start:mov ax,codesg;或mov ax,csmov ss,axmov sp,24h;或mov sp,36;(第一版填1ah 或26)mov ax,0mov ds,axmov bx,0mov cx,8s:push[bx]pop cs:[bx];或pop ss:[bx]add bx,2loop smov ax,4c00hint21hcodesg endsend start(1)程序如下。

assume cs:codedata segmentdw2dup(0)data endscode segmentstart:mov ax,dtatmov ds,axmov bx,0jmp word ptr[bx+1]code endsend start若要使jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?答案①db3dup(0)答案②dw2dup(0)答案③dd0jmp word ptr[bx+1]为段内转移,要CS:IP指向程序的第一条指令,应设置ds:[bx+1]的字单元(2个字节)存放数据应为0,则(ip)=ds:[bx+1]=0简单来说就是,只要ds:[bx+1]起始地址的两个字节为0就可以了第九章检测点9.1(1)程序如下。

assume cs:codedata segmentdd12345678hdata endscode segmentstart:mov ax,datamov ds,axmov bx,0mov[bx],bx;或mov[bx],word ptr0;或mov[bx],offset startmov[bx+2],cs;或mov[bx+2],cs;或mov[bx+2],seg codejmp dword ptr ds:[0]code endsend start补全程序,使用jmp指令执行后,CS:IP指向程序的第一条指令。

第一格可填①mov[bx],bx②mov[bx],word ptr0③mov [bx],offset start等。

第二格可填①mov[bx+2],cs②mov[bx+2],cs③mov [bx+2],seg code等。

解析:jmp dword ptr ds:[0]为段间转移,(cs)=(内存单元地址+2),(ip)=(内存单元地址),要CS:IP指向程序的第一条指令,第一条程序地址cs:0,应设置CS:IP指向cs:0程序中的mov[bx],bx这条指令,是将ip设置为0mov[bx+2],cs,将cs这个段地址放入内存单元执行后,cs应该不变,只调整ip为0,(ip)=ds:[0]=0检测点9.1(3)用Debug查看内存,结果如下:2000:1000BE0006000000......则此时,CPU执行指令:mov ax,2000hmov es,axjmp dword ptr es:[1000h]后,(cs)=0006H,(ip)=00BEH解析:jmp dword ptr为段间转移,高位存放段地址,低位存放偏移地址(cs)=(内存单元地址+2),(ip)=(内存单元地址)根据书P16,对于寄存器AX,AH为高位(前1字节为高位),AL为低位(后1字节为低位)推算出(内存单元地址)=00beh,(内存单元地址+2)=0006h根据书P182,高位存放段地址(后2个字节为高位),低位存放偏移地址(前2个字节为低位)(cs)=(内存单元地址+2),(ip)=(内存单元地址)推算出(cs)=0006h,(ip)=00beh检测点9.2补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。

相关文档
最新文档