王爽《汇编语言》 第10章 call和ret指令


源程序 Assume cs:code Stack segment db 8 dup (0) db 8 dup (0) Stack ends Code segment Start: mov ax,stack mov ss,ax mov sp,16 mov ax,1000 call s mov ax,4c00h int 21h S: add ax,ax ret Code ends End start
3、转移地址在寄存器中的call指令 、转移地址在寄存器中的 指令 格式: 位的寄存器) 格式: call reg(16位的寄存器) 位的寄存器 功能: 将当前IP压栈 用寄存器中的值修改IP 压栈, 功能: 将当前 压栈,用寄存器中的值修改
实现近转移。 实现近转移。 例10-4 下面的程序执行后,AX中的数值为多少? 下面的程序执行后, 中的数值为多少? 中的数值为多少
jmp 指令 标号 二、call指令
执行call指令的功能相当于: 指令的功能相当于: 执行 jmp far ptr 标号 指令的功能相当于 1、push ip或push cs、push ip; 、 jmp 或 、 ; reg 2、修改当前 或ip和cs指向目的地址。 指向目的地址。 、修改当前ip或 dword) ptr [内存 jmp word( 和 指向目的地址 内存] ( ) 内存 Call指令的主要格式: 指令的主要格式: 指令的主要格式
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 I
P 00
下面的程序执行后, 中的数值为多少? 例10-5 下面的程序执行后,ax 和 bx 中的数值为多少?
ss:0
00 19 00 00 00 C S 00 00 00 00 00 00 00 00 00 18 00 00 00 C 00 00 S
S:POP AX :
2、转移的目的地址在指令中的call指令 、转移的目的地址在指令中的 指令 格式: 格式: call far ptr 标号 功能: 将当前CS、 压栈 压栈, 功能: 将当前 、IP压栈,用标号所在地址修
实现远转移。 改CS和IP实现远转移。 和 实现远转移 下面的程序执行后, 中的数值为多少 中的数值为多少? 例10-3 下面的程序执行后,AX中的数值为多少?
•根据位移转移 •转移的目的地址在指令中 转移的目的地址在指令中 •转移地址在寄存器中 转移地址在寄存器中 •转移地址在内存中 转移地址在内存中
1、依据位移进行转移的call指令 、依据位移进行转移的 指令 格式: 格式: call 标号 功能:将当前IP压栈 压栈, 功能:将当前 压栈,IP=IP+16位的位移 位的位移 转移到标号处执行。 量,转移到标号处执行。
例10-2 下面的程序执行后,AX中的数值为多少? 下面的程序执行后, 中的数值为多少 中的数值为多少?
内存地址 1000:0 : 1000:3 : 1000:6 : 1000:7 : 机器码 B8 00 00 E8 01 00 40 58 汇编指令 MOV AX,0 , CALL S INC AX
二、call指令 指令
执行call指令的功能相当于: 指令的功能相当于: 执行 指令的功能相当于 1、push ip或push cs、push ip; 、 或 、 ; 2、修改当前 或ip和cs指向目的地址。 指向目的地址。 、修改当前ip或 和 指向目的地址 Call指令的主要格式: 指令的主要格式: 指令的主要格式
补全程序, 处开始执行指令。 例10-1.补全程序,实现从内存 补全程序 实现从内存1000:0处开始执行指令。 : 处开始执行指令 assume cs:code 返回指令ret和retf 一、返回指令 segment 和 stack 格式: 格式:ret db实现近转移,相当于 ;实现近转移,相当于pop ip 16 dup(0) ends 格式:retf; 实现远转移,相当于pop ip ,pop cs 格式: stack实现远转移,相当于 ; code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax, ret和retf指令执行时,将当前堆栈内 指令执行时, 和 指令执行时 push ax ip 或 ip和 , 容分别出栈给 mov ax, 和cs,以实现指令 push 的近或远转移。 的近或远转移。 ax retf code ends end start
内存中的情况(设程序从 处装入) 内存中的情况(设程序从1000:0处装入) : 处装入
1000:0000 1000:0008
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1001:0000 1001:0003 1001:0005 1001:0008 1001:000B 1001:000E 1001:0011 1001:0013 1001:0015
问题10-1 问题 下面程序返回前,BX中的值为多少? 下面程序返回前, 中的值为多少? 中的值为多少 assume cs:code code segment start: mov ax,1 mov cx,3 call s mov bx,ax mov ax,4c00h int 21h s: add ax,ax loop s ret code ends end start
第10章 call和ret指令 章 和 指令
• • • • • ret和 retf 指令 和 call指令 指令 ret和call指令配合完成子程序调用 和 指令配合完成子程序调用 mul乘法指令 乘法指令 模块化程序设计
assume cs:code assume cs:code stack segment stack 返回指令 segment 一、返回指令ret和retf 和 db 16 dup(0) db 16 dup(0) 格式: 格式 ends 实现近转移,相当于pop stack stack :ret ;实现近转移,相当于ends ip code segment 格式: 格式 segment 实现远转移,相当于pop ip ,pop cs ; code :retf; 实现远转移,相当于 mov ax,4c00h mov ax,4c00h int 21h int 21h start: mov ax,stack start: mov ax,stack mov ss,ax mov ss,ax mov sp,16 mov sp,16 mov ax,0 mov ax,0 push cs push ax push ax mov bx,0 mov bx,0 ret retf code ends code ends end start end start
内存地址 1000:0 : 1000:3 : 1000:8 : 1000:9 : 机器码 B8 00 00 9A 09 00 00 10 40 58 汇编指令 MOV AX,0 , CALL FAR PTR S INC AX S:POP AX : ADD AX,AX , POP BX ADD AX,BX ,
• 两个相乘的数位数相同,8位乘法(乘数和被乘数都为 位乘法( 两个相乘的数位数相同, 位乘法 乘数和被乘数都为8 Mov ax,100 位数); 位乘法(乘数和被乘数都为16位 );16位乘法 位数); 位乘法(乘数和被乘数都为 位。) Mov bx,10000 • 8位乘法中,一个乘数默认在 中,另一个由指令给出, 位乘法中, 位乘法中 一个乘数默认在AL中 另一个由指令给出, Mul bx 16位的结果默认保存在 中。 例:计算 位的结果默认保存在AX中 位的结果默认保存在 计算100×10 × • 16位乘法中,一个乘数默认在AX中,另一个由指令给出, 位乘法中,一个乘数默认在 中 另一个由指令给出, 位乘法中 Mov al,100 32位的结果中高位保存在 中,低位在 中。 位的结果中高位保存在DX中 低位在AX中 位的结果中高位保存在 Mov bl,10 Mul bl
assume cs:code :0001 4、转移地址在内存中的call指令 指令 stack 、转移地址在内存中的 segment :0002 dw 8 :0003 格式:dup(0) call 内存单元] 格式:ends word (dword) ptr [内存单元 内存单元 stack :0004 code 功能: 将当前 将当前IP或 、 压栈 压栈, 功能:segment 或IP、CS压栈,用内存单元中 :0005 start: 的字或双字修改 或IP和CS。 mov ax,data 的字或双字修改IP或 和 。 :0006 mov ss,ax :0007 mov sp,16 :0008 mov word ptr ss:[0] , offset s :0009 mov ss:[2] , cs call dword ptr ss:[0] :000A nop :000B s: mov ax,offset s :000C sp sub ax, ss:[0ch] :000D AX=0001h mov bx,cs :000E sp BX=0000h sub bx,ss:[0eh] :000F code ends :0010 sp end start
•根据位移转移 根据位移转移
Call 标号 Call reg(16位) 位 Call word(dword) ptr [内存 内存] 内存
•转移的目的地址在指令中 Call far ptr 标号 转移的目的地址在指令中 •转移地址在寄存器中 转移地址在寄存器中 •转移地址在内存中 转移地址在内存中
配合使用( 三、call和ret配合使用(实现子程序调用) 和 配合使用 实现子程序调用)
B8 00 8E D0 BC 10 B8 E8 E8 05 B8 00 CD 21 03 C0 C3
序: 和 实现子程序 实现子程序: 使用 • 子程序的格式框架: 子程序的格式框架:
合集下载

汇编语言第二版(王爽)知识总结

汇编语言第二版(王爽)知识总结
相当于 pop IP/pop CS 47. mul 指令 格式:mul reg 或者 mul 内存单元; 结果:8 位乘法,结果放在 AX 中,16 位乘法,则高位放在 DX 中,低位放在 AX 中;
第 11 章 标志寄存器
48. 8086CPU 的 flag 寄存器的结构:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
11. 8086CPU 采用段地址和偏移地址,通过地址加法器来合成物理地址 物理地址=段地址 x 16 + 偏移地址 (段的大小=偏移地址的长度)
12. 偏移地址 16 位,其变化范围为 0—FFFF H;仅用偏移地址来寻址最多可寻 64KB 个内存 单元;
13. CPU 将 CS:IP 指向的内容作为指令执行,读取一条指令后,IP 值将自动增加,以便使 CPU 读下一条指令,机器码占几个字节,IP 值加几;
mov word ptr ds:【0】,1 表示访问为 1 个字节单元
mov byte ptr ds:【0】,1 表示访问为 2 个字节单元 一般来说,我们可用【bx+idata+si】的方式来访问结构体的数据,用 bx 来定义整个结构
体,用 idata 定位结构体中某一个数据项,用 si 来定义数组中的每个元素;
(1)SP=SP-2,SS:SP 指向当前栈顶前面的单元,以当前栈顶前面的单元作为新的栈顶;
(2)将 AX 中的内容送入 SS:SP 指向的内存单元处,SS:SP 此时指向新栈顶;
20. 8086CPU 入栈时,栈顶从高地址向低地址方向移动,栈为空的时候,SS:SP 指向最底部
的字单元的偏移地址+2;
38. div 指令(除法指令)
8 位除数

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

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

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

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

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

第一章基础知识检测点 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 处。

汇编语言(王爽)

汇编语言(王爽)
13
六、存储单元
将存储器划分成若干个基本的存储单位, 存储单元 称为存储单元。给每个存储单元从0开始顺序 编号,称为存储单元的地址。 0 1 0 0 1 1 1 0 0
•位(bit):计算机的最小信息单位, 即一位二进制数(0或1) •字节(Byte):1 Byte=8 bit 一个存储单元可以存储一个字节 即8bit的信息。 1KB=1024B 1GB=1024MB 1MB=1024KB 1TB=1024GB
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0
MOV AX,20000
27
16位寄存器分成两个8位寄存器的使用情况
AX寄存器的逻辑结构
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
作业:
18页检测点2.1
(1)、(2)
33
四、物理地址
我们给每个存储单元给了唯一的一个 编号,这个编号就是这个内存单元的物 理地址。在8086/8088CPU中对外有20根 地址线寻址,所以其系统中的内存单元 物理地址为20位的地址编号。
指针寄存器
变址寄存器
源变址 目的变址
25
16位寄存器
• 寄存器组
控制寄存器
IP PSW CS DS SS ES
指令指针 状态标志
代码段
数据段 堆栈段 附加段
段寄存器
提 用寄存器
• 8086CPU的内部寄存器都是16位。 • 将AX、BX、CX、DX 四个寄存器称为通用寄 存器。 MOV AX,18 • 通用寄存器可分为两个独立的8位寄存器来用。 AX寄存器的逻辑结构

汇编语言王爽第二版课后答案

汇编语言王爽第二版课后答案

(1) 13⑵ 1024,0,1023(3) 8192,1024(4) 2A 30,2A 20,2A 10(5) 64,1,16,4(6) 1,1,2,2,4(7) 512,256(8) 二进制 注意:1.第4题中的符号'A'指求幂运算(如:2A30指2的 30次方)第二章寄存器(CPU 工作原理)检测点(第18页)检测点(第8页)(1)写岀每条汇编指令执行后相关寄存器中的值。

第一空:F4A3H第二空:31A3H第三空:3123H 第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第 ^一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用 指令,编程计算2的4次方。

解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点(第23页)(1)00010H,1000FH第四空:6246H第2题说明:因为段的起始地址要为16的倍数。

所以当段地址小于1001H或大于2000H时CPL都无法寻到。

检测点(第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)<此部分略><此部分略>通过DEBUGS的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005〜ffff:000C(共8个字节单元中)处。

此生产日期不能被改变,因为其具有’只读’属性。

⑷通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输岀到屏幕上。

王爽汇编笔记

王爽汇编笔记

第一章基础知识本章概述:1.汇编语言基本上是直接在硬件上工作的编程语言,需要了解硬件系统才能更好的应用汇编编程。

2.最终运行程序的是CPU,我们用汇编语言编程时,必须要从CPU的角度考虑问题。

一、机器语言1.机器语言是机器指令的集合,它是机器可以正确执行的命令,是一列二进制数字。

CPU将之转变为一列高低电平,以便计算机的电子器件受到驱动,进行计算。

2.每一种微处理器,由于硬件设计和内部结构不同,就需要用不同的电平脉冲来控制,使它工作。

所以每一种微处理器都有自己的机器指令集,也就是机器语言。

二、汇编语言的产生1.机器语言使用上的不便造就了汇编语言的产生。

2.汇编语言是机器指令便于记忆的书写格式。

3.汇编语言的编译器把汇编语言编译成机器指令,由计算机最终执行。

三、汇编语言的组成1.汇编指令:机器码的助记符,有对应的机器码,汇编语言的核心,决定汇编语言的特性。

2.伪指令:没有对应的机器码,由编译器执行,计算机不执行。

3.其他符号:如+、—、*、/等,有编译器识别,没有对应的机器码。

四、存储器1.内存是给CPU提供数据和指令的部件,它是程序运行的基本资源。

2.磁盘上的数据和程序需要先读到内存中才可以被CPU使用。

五、指令和数据1.指令和数据是应用上的概念。

2.在内存和磁盘上,指令好数据没有任何区别,都是二进制信息。

3.在CPU运行时才区分数据和信息。

六、存储单元1.存储一个bit信息的硬件存储单位是存储元。

2.一般是8个存储元组成一个存储单元。

3.若干存储单元再组成存储器。

七、CPU对存储器的读写1.存储单元从零开始顺序编号,这些编号可以看作存储单元在存储器中的地址。

2.CPU要访问内存必须先要指定存储单元的地址。

3.在计算系统中一般存储器有很多个,必须指明准确的地址和读写访问的控制信息。

4.总线按逻辑分有:地址总线、控制总线、数据总线。

5.执行顺序:地址信息、控制信息、数据信息。

6.总线直接是和CPU的管脚连接起来的。

汇编语言(王爽)-第二版-课后题全-答案【范本模板】

汇编语言(王爽)-第二版-课后题全-答案【范本模板】

检测点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。

汇编语言第十章CALL和RET指令

汇编语⾔第⼗章CALL和RET指令call和ret指令都是转移指令,它们都修改IP,或同时修改IP和CSret和retf:ret指令使⽤栈中数据,修改IP内容,实现近转移。

进⾏两步操作:(1)(IP)= ((ss) * 16 + (sp)) (2) (sp) = (sp) + 2 等价于 pop IP retf指令使⽤栈中数据,修改CS和IP内容,实现远转移。

进⾏四步操作:(1)(IP)= ((ss) * 16 + (sp)) (2) (sp) = (sp) + 2 (3) (CS) = ((ss) * 16 + (sp)) (4)(sp) = (sp) + 2 等价于pop IP pop CScall指令:call指令进⾏两步操作:(1)将当前的IP 或 CS和IP压⼊栈中;(2)转移(IP对应近转移,CS和IP对应远转移)依据位移进⾏的call指令:call 标号进⾏如下操作:(1)(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (IP) (2)(IP) = (IP) + 16位位移等价于 push IP jmp near ptr 标号依据地址进⾏的call指令:call far ptr 标号进⾏如下操作:(1)(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (CS) (sp) = (sp) - 2 ((ss) * 16 + (sp)) = (IP) (2) (CS)的地址 = 标号所在段的段地址;(IP)的地址 = 标号所在段的偏移地址等价于 push CS push IP jmp far ptr 标号call 16 位reg 进⾏如下操作:(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (IP) (IP) = 16位reg等价于 push IP jmp near 16位regcall word ptr 内存单元地址进⾏如下操作:(sp) = (sp) - 2 ((ss) * 16 + (sp)) = (IP) (IP) = (内存单元地址中的内容)等价于push IP jmp word ptr 内存单元地址call dword ptr 内存单元地址进⾏如下操作:(1)(sp)= (sp) - 2 ((ss) * 16 + (sp)) = (CS) (sp) = (sp) - 2 ((ss) * 16 + (sp)) = (IP)(2) (CS)的地址 = 后两字节内容;(IP)的地址 = 前两字节内容等价于push CS push IP jmp dword ptr 内存单元地址⽤call和ret实现调⽤⼦程序:call sub1...(返回处)sub 1 :.....(⼦程序)ret (返回第⼆⾏)mul乘法指令:mul reg 或者 mul 内存单元两个数相乘,位数必须相等,要么都是8位(⼩于255),要么都是16位。

汇编语言笔记 王爽教程

汇编语言笔记王爽教程第一章基础知识1. 汇编指令是机器指令的助记符,同机器指令一一对应。

2. 每一种CPU都有自己的汇编指令集。

汇编语言发展至今,由以下三类指令组成:1汇编指令:机器码的助记符,有对应的机器码;2伪指令:没有对应的机器码,由编译器执行,计算机并不执行;3其他符号:如:+,--,*,/等,由编译器识别,没有对应的机器码。

3. CPU可以直接使用的信息在存储器中存放。

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

5. 存储单元从零开始顺序编号。

6. 一个存储单元可以存储8个bit(用作单位写为“b”),即8位二进制数7. 1B=8b 1KB=1024b 1MB=1024KB 1GB=1024MB 1TB=1024GB8. 每一个CPU芯片都有许多管脚,这些管脚和总线相连,也可以说这些管脚引出总线。

一个CPU可以引出总线的宽度标志了这个CPU的不同方面的性能:V地址总线的宽度决定了CPU的寻址能力;Vv数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;Vvv控制总线的宽度决定了CPU对系统中其他器件的控制能力;9. 在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线相连。

这些器件有:CPU,存储器,外围芯片组,扩展插槽等。

扩展插槽上一般插有RAM内存条和各类接口卡。

10. CPU对外部设备都不能直接控制,直接控制这些设备进行工作的是插在扩展插槽上的接口卡。

扩展插槽通过总线和CPU相连,所以接口卡液通过总线同CPU相连。

即CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。

11. 随机存储器RAM,可读可写,但是必须带电存储,关机后存储的内容丢失;只读存储器ROM,只能读取不能写入,关机后其中的内容不丢失。

存储器从功能和连接上分为:* 随机存储器:用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由装在主板上的RAM和插在扩展插槽上的RAM组成。

最新汇编语言-第二版-王爽-完整答案

第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。

汇编_10 call 和 ret 指令


10.10 参数和结果传递的问题


我们设计一个子程序,可以根据提供的 N,来计算N的3次方。 这里有两个问题:
• (1)我们将参数N存储在什么地方? • (2)计算得到的数值,我们存储在什么地 方?
10.10 参数和结果传递的问题


很显然,我们可以用寄存器来存储,可以 将参数放到 bx 中 ;因为子程序中要计 算 N×N×N ,可以使用多个 mul 指令, 为了方便,可将结果放到 dx 和 ax中。 子程序
10.11 批量数据的传递


参数较多的情况下,将批量数据放到内 存中,然后将它们所在内存空间的首地 址放在寄存器中,传递给需要的子程序。 对于具有批量数据的返回结果,也可用 同样的方法。
10.11 批量数据的传递

我们看一个例子,设计子程序
• 功能:将一个全是字母的字符串转化为大写。 • 子程序
10.10 参数和结果传递的问题

子程序:
• 说明:计算N的3次方 • 参数: (bx)=N • 结果: (dx:ax)=N∧3
cube:mov ax,bx mul bx mul bx ret
10.10 参数和结果传递的问题


注意,我们在编程的时候要注意良好的 风格,对于程序应有详细的注释。子程 序的注释信息应该包含对子程序的功能、 参数和结果的说明。 因为今天写的子程序,以后可能还会用 到;自己写的子程序,也很可能要给别 人使用,所以一定要有全面的说明。

10.6 转移地址在内存中的call指令

(2) call dword ptr 内存单元地址(示 例)
• 比如,下面的指令: mov sp,10h mov ax,0123h mov ds:[0],ax mov word ptr ds:[2],0 call dword ptr ds:[0] 执行后,(CS)=0,(IP)=0123H, (sp)=0CH
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档