汇编语言复习重点(王爽)
- 格式:doc
- 大小:129.50 KB
- 文档页数:18
汇编语言(教材王爽)期末考试复习:考试题型:选择、填空、程序分析、编程题一、重点复习课本的检测点1.1-3.2与课后实验1-14:二、需要掌握的指令见后面附录三、汇编语言主要知识点:寄存器与存储器1. 寄存器功能. 寄存器的一般用途和专用用途. CS:IP 控制程序执行流程. SS:SP 提供堆栈栈顶单元地址. DS:BX(SI,DI) 提供数据段内单元地址. SS:BP 提供堆栈内单元地址. ES:BX(SI,DI) 提供附加段内单元地址. AX,CX,BX和CX寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。
. PSW程序状态字寄存器只能通过专用指令(LAHF, SAHF)和堆栈(PUSHF,POPF)进行存取。
2. 存储器分段管理. 解决了16位寄存器构成20位地址的问题. 便于程序重定位. 20位物理地址=段地址 * 16 + 偏移地址. 程序分段组织: 一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。
3. 堆栈. 堆栈是一种先进后出的数据结构 , 数据的存取在栈顶进行 , 数据入栈使堆栈向地址减小的方向扩展。
. 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。
. 堆栈总是以字为单位存取指令系统与寻址方式1. 指令系统. 计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。
执行指令后,一般源操作数不变,目的操作数被计算结果替代。
. 机器指令由CPU执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类: 数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。
2. 寻址方式. 寻址方式确定执行指令时获得操作数地址的方法. 分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。
. 与数据有关的寻址方式的一般用途:(1) 立即数寻址方式--将常量赋给寄存器或存储单元(2) 直接寻址方式--存取单个变量(直接给出地址值或变量名)(3) 寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度(4) 寄存器间接寻址方式--访问数组元素(5) 变址寻址方式(6) 基址变址寻址方式课本P164(7) 相对基址变址寻址方式(5),(6),(7)都便于处理数组元素. 与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI或BP. 与转移地址有关的寻址方式的一般用途:(1) 段内直接寻址--段内直接转移或子程序调用(2) 段内间接寻址--段内间接转移或子程序调用(3) 段间直接寻址--段间直接转移或子程序调用(4) 段间间接寻址--段间间接转移或子程序调用汇编程序和汇编语言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.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。
汇编语言学习笔记《汇编语言》--王爽前言学习汇编目的:充分获得底层编程体验;深刻理解机器运行程序的机理。
原则:没有通过监测点不要向下学习;没有完成当前实验不要向下学习。
第一章基础知识有三类指令组成汇编语言:汇编指令;伪指令;其他符号。
8bit = 1byte = 一个存储单元有n根地址线,则可以寻址2的n次方个内存单元。
1.1节--1.10节小结(1)汇编指令是机器指令的助记符,同机器指令一一对应。
(2)每一种cpu都有自己的汇编指令集。
(3)cpu可以直接使用的信息在存储器中存放。
(4)在存储器中指令和数据没有任何区别,都是二进制信息。
(5)存储单元从零开始顺序编号。
(6)一个存储单元可以存储8个bit,即八位二进制数。
(7)每一个cpu芯片都有许多管脚,这些管脚和总线相连。
也可以说,这些管脚引出总线。
一个cpu可以引出的三种总线的宽度标志了这个cpu不同方面的性能。
地址总线的宽度决定了cpu的寻址能力;数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了cpu对系统中其他器件的控制能力。
监测点:1KB的存储器有1024个存储单元?存储单元的编号从0到1023.内存地址空间:最终运行程序的是cpu,我们用汇编编程时,必须要从cpu的角度思考问题。
对cpu来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受cpu寻址能力的限制。
这个逻辑存储器即是我们所说的内存地址空间。
第二章寄存器(cpu的工作原理)mov ax, 2add ax, axadd ax, axadd ax, ax(1)cpu中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;(2)段地址和偏移地址通过内部总线送人一个称为地址加法器的部件;(3)地址加法器将两个16位地址合成为一个20位的物理地址;(4)地址加法器通过内部总线将20位物理地址送人输入输出控制电路;(5)输入输出控制电路将20位物理地址送上地址总线;(6)20位物理地址被地址总线传送到存储器;段地址*16+偏移地址= 物理地址的本质含义内存并没有分段,段的划分来自cpu。
第一章基础知识本章概述: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)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。
汇编语言(王爽)Word版(1)第1章基础知识汇编语言是直接在硬件之上工作的编程语言,我们首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程。
在本章中,我们对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行。
当课程进行到需要补充新的基础知识(关于编程结构或其他的)的时候,再对相关的基础知识进行介绍和探讨。
我们的原则是,以后用到的知识,以后再说。
在汇编课程中我们不对硬件系统进行全面和深入的研究,这不在课程的范围之内。
关于PC机及CPU物理结构和编程结构的全面研究,在《微机原理与接口》中进行;对于计算机一般的结构、功能、性能的研究在一门称为《组成原理》的理论层次更高的课程中进行。
汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作。
1.1 机器语言说到汇编语言的产生,首先要讲一下机器语言。
机器语言是机器指令的集合。
机器指令展开来讲就是一台机器可以正确执行的命令。
电子计算机的机器指令是一列二进制数字。
计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。
上面所说的计算机指的是可以执行机器指令,进行运算的机器。
这是早期计算机的概念。
现在,在我们常用的PC机中,有一个芯片来完成上面所说的计算机的功能。
这个芯片就是我们常说的CPU(Central Processing Unit,中央处理单元),CPU是一种微处理器。
以后我们提到的计算机是指由CPU和其他受CPU直接或间接控制的芯片、器件、设备组成的计算机系统,比如我们最常见的PC机。
每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。
所以每一种微处理器都有自己的机器指令集,也就是机器语言。
早期的程序设计均使用机器语言。
程序员们将用0、1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
应用8086CPU完成运算s=768+12288-1280,机器码如下。
汇编语⾔笔记王爽教程汇编语⾔笔记王爽教程第⼀章基础知识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组成。
《汇编语言》王爽版学习笔记(精辟的第十一章总结完毕)Nisy总坛主UID2198精华69威望8662在线时间2615 小时最后登录2010-12-10《汇编语言》王爽版学习笔记(精辟的第十一章总结完毕)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&前言:汇编语言,这个东西我是自学的,所以理解上也是很皮毛,这里简单写下读书写得,文中如有出错之处,还望多多指正。
我把这本书分成两部分:前11章为第一部分。
后几章涉及到中断等16位操作系统的知识,这儿就不写了,我们只关心前一部分。
汇编语言。
我是这样理解的:首先他是一套指令集,学习ASM可以站到一个“如何设计处理器、代码如何执行的角度”来看待这套指令集,或者说我们如何通过学习汇编语言来构建一个数据自己涉及的虚拟机平台;期中包括了寄存器的设置、如何将程序模块化==>堆栈思想的引用等等。
程序,就是内存中的一段数据我们可以将其当做代码也可以当做数据也可以作堆栈来使用所以内存的这些数据如何使用决定权在我们如何去定义我们如何让内存的数据与处理器产生联系并去实现程序员的目的作为要写一本教程,首先要考虑如何将知识讲授给对方。
这就是一个将知识系统化并条理化展开的一个过程。
前言上有两句话:一个是循序渐进后边的知识后边再讲。
这句话很厉害这个思想代表了作者的逻辑,第二句话是编程的平台不是操作系统而是硬件。
第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)查看内存中的内容。
学_汇编语⾔_王爽版要点采集笔记(未完待续...)第⼀章基础知识存储器(内存)存放CPU⼯作的指令和数据(CPU可以直接使⽤的信息在内存中存放);指令和数据都是⼆进制数没有任何区别,由CPU决定是数据还是指令内存单元:存储器被分为若⼲个存储单元,并从0开始编号(存储单元的地址),⼀个存储单元为1字节(8bit)CPU的读写总线逻辑上分为:地址总线、数据总线、控制总线地址总线:地址线宽度决定了CPU的寻址能⼒,计算⽅式:2^[地址线宽](个内存单元)数据总线:决定了CPU和外界的数据传输速度(8根数据总线可传送⼀个8位(bit)⼆进制数,即1个字节)控制总线:是各外部器件的不同控制线的集合CPU进⾏数据读写必须经过3类信息交互:①存储单元的地址(地址信息)②器件的选择,读或写的命令(控制信息)③读或写的数据(数据信息)读:CPU在内存中读取数据时,要先指定存储单元的地址(你要找⼀个地⽅先要确定⼀个地址),会把要读取的地址经过地址总线发给内存;同时CPU控制器将内存读命令通过控制总线发送给内存,并通知内存要读取数据;最后内存将被指定的内存单元中的数据经过数据总线送⼊CPU写:与读类似,CPU经地址线发送要操作的内存单元的地址,CPU经控制线将内存写命令发送⾄内存,并通知内存要写⼊数据;CPU通过数据线将数据送⼊指定的内存单元;内存地址空间:每⼀个外部器件都有⾃⼰的存储芯⽚(如显卡有显存RAM和ROM(装有显卡BIOS)、⽹卡ROM(装有⽹卡BIOS)),CPU控制各个设备都是通过总线向各个设备的存储芯⽚发送命令,存储芯⽚根据CPU的命令控制外设进⾏⼯作所有的物理存储器被看作⼀个由若⼲存储单元组成的逻辑存储器,每个物理内存在这个逻辑内存中占有⼀个地址段,即⼀段地址空间可看出各存储芯⽚都和CPU的总线相连;CPU对它们的读写都通过控制线发出内存读写命令CPU根据读取不同的地址实现对不同设备的读写操作,这个逻辑存储器就是内存地址空间,它的容量受CPU寻址能⼒的限制(即地址总线宽度限制),如有20位的地址总线宽度,它的寻址能⼒为2^20个内存单元(⼀个存储单元为1字节(8位))所以该CPU的内存地址空间的⼤⼩为1MB;32位地址线宽的CPU内存地址空间最⼤为为4GB(CPU不⾏的话加内存条也没得⽤!64位的就不得了了,主板不够插)1、CPU寻址能⼒ = 2^线宽2、⼀根数据总线传⼀位数据,8根数据总线⼀次传8位数据(1Byte)第⼆章寄存器CPU组成:运算器(信息处理)、控制器(控制各种器件进⾏⼯作)、寄存器(信息存储)内部总线实现CPU内部器件的联系外部总线实现CPU与主板和其他器件的联系AX、BX、CX、DX通常⽤来存放⼀般性数据——通⽤寄存器(后⾯是X的寄存器是16位的,现在的EAX前⾯加了个E是32位)这四个寄存器都可以分为两个独⽴的⼋位寄存器使⽤(如AX可分为⾼位AH和低位AL),是为了向下兼容(只使⽤低位,⾼位填0)单独使⽤时当成⼀个来看,同时使⽤时是整体(计算⽅法 2^[位数] )⼀个字=两个字节=>⼀个⼗六进制数,所以⼗六进制数的⼀位相当于⼆进制数的四位汇编指令不分⼤⼩写16位结构的CPU具备以下特征(64位同理):1、运算器⼀次最多可以处理16位的数据;2、寄存器的最⼤宽度为16位;3、寄存器和运算器之间的通路是16位的;8086CPU给出物理地址的⽅法:8086有20位地址总线,可传送20位地址,寻址能⼒为2^20 = 1M,⽽8086内部为16位结构,他只能传送16位的地址,表现出的寻址能⼒只有64,说明CPU不能直接传送16位数据地址到20位的总线上(资源浪费),所以需要转换成20位的地址;8086采⽤⼀种在内部⽤两个16位地址合成的⽅法来形成⼀个20位的物理地址(段地址和偏移地址),经过地址加法器转换成20位的物理地址,⽰意图:地址加法器的⼯作原理:物理地址 = 段地址SA*16+偏移地址EA & 物理地址 = 基础地址 + 偏移地址相当于把段地址往⾼位进了⼀位,这⾥说的16位是⼆进制的数,CPU中存储的数据只能是⼆进制,⽽我们表⽰地址是⽤16位的数字,前⾯说了2和16进制的转换关系,⼀个⼗六进制数的位等于四个位的⼆进制数,所以段地址乘以16,把段地址后移了⼀位,增加了⼀位16进制数,⼆进制就得加四位,即数据左移四位(⼆进制位),16+4=20位,转换完成⼀个数据的X进制形式左移1位,相当于乘以X(⼗进制数乘⼗后左移⼀位)⼀个数据的⼆进制形式左移N位,相当于该数据乘以2的N次⽅段落的概念:内存本⾝并没有被分段,分段概念来⾃于CPU,8086CPU⽤物理地址 = 段地址*16+偏移地址的⽅式给出内存单元的物理地址,使得我们可以⽤分段的⽅式来管理内存⽤段地址x16 定位段的起始地址,⽤偏移地址定位段中的内存单元注意:1、段地址X16必然是16的倍数,即⼀个段的起始地址也⼀定是16的倍数2、偏移地址为16位,16位地址的寻址能⼒为64k,所以⼀个段的长度最⼤为64kCPU访问内存单元时必须向内存提供内存单元的物理地址(有地址才知道要访问哪⾥)CPU可以⽤不同的段地址和偏移地址形成同⼀个物理地址(段地址+偏移地址都等于物理地址)偏移地址EA为16位,变化范围0~FFFFH,仅⽤偏移地址来寻址最多可寻64k个内存单元(如段地址位1000H,那么CPU寻址范围为:10000H~1FFFFH储存单元的地址⽤段地址和偏移地址描述:数据在21F60中 a、数据存在内存2000:1F60单元中;b、数据存在内存的2000段中的1F60中;(可将地址连续、起始地址为16的倍数的⼀组内存单元定义为⼀个段)段寄存器:提供段地址,8086CPU有4个段寄存器:CS(代码(指令)段寄存器)、DS(数据段寄存器)、SS(堆栈stack段寄存器)、ES(附加段寄存器)CS和IP(指令指针寄存器)是8086CPU中最关键的寄存器,存放CPU当前要读取的指令的地址在任何时候,CPU将CS为指定(存放)指令的段地址(代码段⾸地址),IP指定(存放)指令的偏移地址(指令从哪处代码开始执⾏),CS和IP经过地址加法器加⼯后(通过输⼊输出控制电路)从地址总线指向内存单元读取指令,指令再通过数据总线(经过输⼊输出控制电路)传递给指令缓冲器,再到执⾏控制器,实现执⾏效果内存中被CPU执⾏过的代码必然被CS:IP指向过1. 从 CS : IP 指向内存单元读取指令,读取的指令进⼊指令缓冲器2. IP = IP + 所读取指令的长度,从⽽指向下⼀条(即所指向的指令执⾏完后接着运⾏接着的下⼀条指令)CPU加电启动或复位时,CS=FFFFH,IP=0000H,即CPU刚启动时读取并执⾏的第⼀条指令是FFFF0H修改CS、IP值的指令:转移指令 jmp1. 同时修改CS、IP的内容:jmp 段地址:偏移地址(例:jmp 2AE3:3)2. 只修改IP的内容:jmp 某⼀合法寄存器(jmp ax),⽤寄存器中的值修改IP代码段:根据需要,将⼀组内存单元定义为⼀个段:把长度<=64kb的⼀组代码存在⼀组地址连续、起始地址为16的倍数的内存单元中(个⼈理解为偏移地址需要16位的位置),这段内存⽤来存放代码,从⽽定义了⼀个代码段(代码段不能影响CPU来是否执⾏它,还是得看CS:IP所指向的内存单元中的内容为指令,代码段仅仅是⼀种编程格式)所以要将CS:IP指向所定义的代码段中的第⼀条指令的⾸地址debug命令:R 查看、改变CPU寄存器的内容(修改寄存器中的值:r [寄存器名])D 查看内存中的内容( d 段地址:偏移地址)E 改写内存中的内容U 将内存中的及其指令翻译成汇编指令T 执⾏⼀条机器指令A 以汇编指令的格式在内存中写⼊⼀条机器指令第三章寄存器(内存访问)字单元:存放字型数据的内存单元⼀个字等于两个字节,⼀个字节等于8⽐特,则⼀个字型数据有16位;因为有两个字节组成,字可分为⾼位和低位,图中0和1可组成⼀个字,1位⽐0位⾼,所以他们组成的字,⾼位是4E,低位是20即4E20(可以直接⽤字的起始地址描述它,如0地址字单元)任何两个地址连续的内存单元,可以将其看成⼀个内存字单元,⼀个为字低位字节单元,⼀个为字⾼位字节单元DS寄存器和 [address]DS寄存器:⽤来存放要要访问数据的段地址(⾸地址),配合 [ EA ] 使⽤,[ ] 说明操作的是⼀个内存单元,EA为偏移地址,段地址为DS中存放的地址数据段:将⼀组长度⼩于64k、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从⽽定义了⼀个数据段;具体操作时⽤ds存放数据段的段地址,在根据需要⽤相关指令访问数据段中的具体单元栈(stack):出⼊栈规则LIFO(后进先出)⼊栈:push 出栈:poppush 寄存器 pop 寄存器push 段寄存器 pop 段寄存器push 内存单元 pop 内存单元内存空间是如何被当做栈使⽤的:每执⾏⼀次⼊栈指令,都会将寄存器的内容放⼊栈顶单元的上⽅,此时段寄存器SS、寄存器SP就会存放栈顶的地址及偏移量,任何时候SS:SP都指向栈顶元素,执⾏push和pop时,CPU从SS和SP中获取段顶地址⼊栈时:SP=SP-2 (⼊栈时由⾼位往低位⾛)出栈时:SP=SP+2 (出栈时由低位往⾼位⾛)注意:⼊栈时的偏移量SP的取值要⽐当前栈最⾼位+1位(如要⼊栈⾄1000E~F(即栈最底部的字单元地址000E),SP值应⽐F⾼⼀位0010栈顶越界:需⾃⾏根据所安排的栈⼤⼩进⾏出⼊栈,避免⼊栈数据太多越界,也要避免空栈的时候继续出栈导致越界;越界会覆盖或修改掉可能是其他程序的内存数据或指令,需要注意!push执⾏时,CPU改变栈顶的指向,即SP=SP-2,再将数据传⼊SS:SP指向的字单元中;pop执⾏时,CPU先读取栈顶指向的字单元数据,再改变SP,即SP=SP+2;可见push、pop指令修改的只是SP,栈顶的变化范围为:0~FFFF栈操作机制:SS:SP指⽰栈顶;改变SP后写内存的⼊栈指令;读内存后改变SP的出栈指令Debug的 T 命令在执⾏修改寄存器SS的指令时,下⼀条指令也紧接着被执⾏(mov ss,ax ; mov ss,[0] ; pop ss)可⽤段寄存器表⽰内存单元的段地址:第四章汇编程序编写汇编源码----编译连接----可执⾏⽂件(包含由汇编指令翻译过来的机器码和源程序中定义的数据以及相关的描述信息,如程序⼤⼩,占⽤多少内存空间等)伪指令:段名 segment ;定义⼀个段,该段从此开始:段名 ends ;该段从此结束end:汇编程序结束的标记assume:含义为“假设”,假设某⼀段寄存器和程序中的某⼀个⽤segment…ends定义的段相关联,⽤于说明关联的关系。
王爽汇编知识点总结一、汇编语言概述1.概念及特点汇编语言是一种低级语言,它直接使用计算机硬件的指令集进行编程。
相对于高级语言,汇编语言更加接近计算机的硬件,编写的程序可以更加高效地执行。
汇编语言的特点包括:直接面向硬件、指令集丰富、程序执行效率高等。
2.编程原理汇编语言的编程原理是通过编写符合计算机指令集的程序代码来实现对计算机硬件的控制。
汇编语言程序需要通过汇编器将其翻译成机器码,然后才能在计算机上执行。
3.应用领域汇编语言在操作系统、驱动程序、嵌入式开发等方面有着广泛的应用。
在一些对程序性能要求很高、对硬件操作要求很精细的场景中,汇编语言仍然是一种非常重要的开发语言。
二、汇编语言基础知识1.寄存器在汇编语言中,寄存器是一种用于临时存储数据的设备。
不同的架构下寄存器的数量和功能都会有所不同,但一般来说,汇编语言中的寄存器包括通用寄存器、段寄存器、标志寄存器等。
2.指令汇编语言的指令是直接面向硬件的控制命令。
不同的指令可以实现对寄存器、内存、I/O设备等的读写操作、逻辑运算、算术运算等。
3.内存管理在汇编语言中,程序需要通过对内存的读写来实现对数据的操作。
因此,对内存的管理和操作是汇编语言编程中的一个重要知识点。
4.程序结构汇编语言程序的结构一般包括数据段、代码段、栈段等部分。
程序的结构对于程序的可读性和执行效率都有着很大的影响。
5.汇编指令集不同的CPU架构有不同的指令集,汇编语言程序需要根据不同的指令集进行编写。
常见的指令集包括x86指令集、ARM指令集等。
三、汇编语言编程技巧1.寄存器的使用在汇编语言编程中,合理地使用寄存器可以减少数据在内存和寄存器之间的频繁传输,提高程序的执行效率。
2.指令的优化对指令的选择和使用可以影响程序的执行效率,因此在编写汇编语言程序时需要选取适当的指令以实现对数据的操作。
3.内存管理合理地管理内存可以避免内存泄露和内存碎片的问题,提高程序的可靠性和执行效率。
4.程序结构的优化合理地设计程序的结构可以提高程序的可读性和维护性,同时也可以提高程序的执行效率。
《汇编语⾔》(王爽)笔记1、有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。
2、汇编指令伪指令3、CPU通过总线控制接⼝,接⼝控制设备4、CPU对物理器件的操作,通过控制线发出内存读写命令,把他们都当作内存来对待。
所有的物理存储器被看作⼀个由若⼲存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中张有⼀个地址段,即⼀段地址空间。
CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。
5、内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。
6、mov ax,8226mov bx,axadd ax,bxax + bx = 1044CHax = 044CH(最⾼位并不丢弃,只是存不下)7、mov ah,0mov al,C5Hadd al,93Hal + 93H = 158Hax = 0058H(此时al作为⼀个独⽴的8位寄存器来使⽤的,和ah没有关系,CPU在执⾏这条指令是认为ah和al是两个不相关的寄存器。
不要错误的认为,诸如add al,93H的指令产⽣的进位会存储在ah中,add al,93H 进⾏的是8为运算)add ax,93Hax =0158H(如果执⾏add ax,93H ,低8位的进位会存储在ah中,CPU在执⾏这条指令时认为只有⼀个16位寄存器ax,进⾏的是16位运算。
)8、在8086PC机中,存储单元的地址⽤两个元素来描述,即段地址和偏移地址段地址*16 + 偏移地址 = 物理地址⼀个段的起始地址⼀定是16的倍数,⼀个段的长度最⼤为64KB9、 4个段寄存器:cs、ds、ss、es10、CS、IP是8086CPU中两个最关键的寄存器,它们指⽰了CPU当前要读取指令的地址。
CS为代码段寄存器,IP为指令指针寄存器。
在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取⼀条指令并执⾏。
汇编语言(教材王爽)期末考试复习:考试题型:选择、填空、程序分析、编程题一、重点复习课本的检测点1.1-3.2与课后实验1-14:二、需要掌握的指令见后面附录三、汇编语言主要知识点:寄存器与存储器1. 寄存器功能. 寄存器的一般用途和专用用途. CS:IP 控制程序执行流程. SS:SP 提供堆栈栈顶单元地址. DS:BX(SI,DI) 提供数据段内单元地址. SS:BP 提供堆栈内单元地址. ES:BX(SI,DI) 提供附加段内单元地址. AX,CX,BX和CX寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。
. PSW程序状态字寄存器只能通过专用指令(LAHF, SAHF)和堆栈(PUSHF,POPF)进行存取。
2. 存储器分段管理. 解决了16位寄存器构成20位地址的问题. 便于程序重定位. 20位物理地址=段地址 * 16 + 偏移地址. 程序分段组织: 一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。
3. 堆栈. 堆栈是一种先进后出的数据结构 , 数据的存取在栈顶进行 , 数据入栈使堆栈向地址减小的方向扩展。
. 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。
. 堆栈总是以字为单位存取指令系统与寻址方式1. 指令系统. 计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。
执行指令后,一般源操作数不变,目的操作数被计算结果替代。
. 机器指令由CPU执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类: 数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。
2. 寻址方式. 寻址方式确定执行指令时获得操作数地址的方法. 分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。
. 与数据有关的寻址方式的一般用途:(1) 立即数寻址方式--将常量赋给寄存器或存储单元(2) 直接寻址方式--存取单个变量(直接给出地址值或变量名)(3) 寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度(4) 寄存器间接寻址方式--访问数组元素(5) 变址寻址方式(6) 基址变址寻址方式课本P164(7) 相对基址变址寻址方式(5),(6),(7)都便于处理数组元素. 与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI或BP. 与转移地址有关的寻址方式的一般用途:(1) 段内直接寻址--段内直接转移或子程序调用(2) 段内间接寻址--段内间接转移或子程序调用(3) 段间直接寻址--段间直接转移或子程序调用(4) 段间间接寻址--段间间接转移或子程序调用汇编程序和汇编语言1. 汇编程序. 汇编程序是将汇编语言源程序翻译成二进制代码程序的语言处理程序,翻译的过程称为汇编。
2. 汇编语言. 汇编语言是用指令助记符,各种标识变量,地址,过程等的标识符书写程序的语言, 汇编语言指令与机器指令一一对应。
. 伪指令,宏指令不是由CPU执行的指令,而是由汇编程序在汇编期间处理的指令。
. 伪指令指示汇编程序如何完成数据定义,存储空间分配,组织段等工作。
. 宏指令可简化程序并减少程序书写量。
(不要求). 条件汇编伪指令的功能是确定是否汇编某段源程序,而不是实现程序分支,对未汇编的程序将不产生相应的目标代码。
. 结构作为一种数据结构可将一组类型不同但有逻辑关联的数据组织在一起,便于整体处理数据。
. 记录可用于提高存储单元的利用率,将若干不足一个字节或字且有逻辑关联的信息压缩存放在一个字节或字中。
. 指令中的表达式在汇编期间计算,并且只能对常量或地址进行计算。
程序设计基础1. 分支程序设计. 程序分支由条件转移指令或无条件转移指令实现. 存放若干目的转移地址或跳转指令的跳转表常用于实现多路分支. 条件转移指令只能实现偏移量为-128至+127字节范围的转移. 无条件转移指令根据寻址方式可实现短转移(偏移量为-128至+127字节),段内转移,段间转移。
2. 循环程序设计. 可由循环控制指令或条件转移指令组织循环结构.内层循环结构必须完全包含在外层循环结构内,并不能发生从循环结构外向循环结构内的转移。
3. 子程序设计. 子程序中应保护寄存器内容,并正确使用堆栈, 成对执行PUSH和POP指令,保证执行RET指令时堆栈栈顶为返回地址。
. 主程序可通过寄存器,参数表,或堆栈传递参数给子程序4. EXE文件和COM文件?. 二者都是可执行文件. COM文件源程序的特点是: 第一条可执行指令的起始存放地址必须是100H,不能分段,不用定义堆栈,所有过程为NEAR类型,直接用INT 20H 指令返回DOS。
5. DOS功能调用与BIOS中断调用. 二者都是完成DOS系统提供给用户的输入/输出等常用功能,通过执行软中断指令完成一次软中断服务。
.DOS功能调用的中断服务程序是操作系统的一部分,存于RAM中; 而BIOS中断调用的中断服务程序存放在ROM中。
输入/输出与中断系统1. 输入/输出的方式. 程序直接I/O方式: 用IN和OUT指令直接在端口级上进行I/O操作,数据传送方式分为无条件传送方式和查询传送方式。
. 中断传送方式: 由CPU响应中断请求完成中断服务。
. DMA传送方式: 直接在存储器与外设之间传送数据。
2. 有关中断的概念. 中断、中断源、中断请求、中断服务、中断向量、中断向量表、中断响应过程、中断指令、开中断、关中断、内部中断、外部中断、可屏蔽中断、非屏蔽中断。
四、程序编写及程序分析填空类的题目:(主要是书中的实验)1、编程,向内存0:200~0:23f依次传递数据0~63(3fh),程序中只能使用9条指令,9条指中包括“mov ax,4c00h”和“int 21h”。
以及实验4的第3小题将指令复制到0:200处2、编程,将datasg段中每个单词的前4个字母改写为大写字母。
assume cs:codesg,ss:stacksg,ds:datasgstacksg segmentdw 0,0,0,0,0,0,0,0stacksg endsdatasg segmentdb '1. display 'db '2. brows 'db '3. replace 'db '4. modify 'datasg ends3、编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcometo masm!'。
4、编写子程序:显示字符串;名称:show_str;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址;返回:显示在屏幕上5、编写子程序:.解决除法溢出问题;名称:divdw;功能:除法,被除数32位,除数16位,商32位,余数16位,不会溢出;参数:(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数;返回:(dx)=商高16位,(ax)=商低16位,(cx)=余数6、数值显示;名称:dtoc_word;功能:将一个word型数转化为字符串;参数:(ax)=word型的数据,ds:si指向字符串的首地址;返回:ds:[si]放此字符串,以0结尾7、编写子程序;名称:letterc;功能:将以0结尾的字符串中的小写字母转变成大写字母;参数:ds:si开始存放的字符串;返回:ds:si开始存放的字符串8、编写0号中断的处理程序编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。
五、参考习题1什么是堆栈操作?以下关于堆栈操作的指令执行后,SP的值是多少?PUSH AXPUSH CXPUSH DXPOP AXPUSH BXPOP CXPOP DX堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。
堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈),数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素,压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。
在进行以上一系列堆栈操作后,SP指针的值是原SP-2。
2用汇编语言指令实现以下操作。
(1)将寄存器AX、BX和DX的内容相加,和放在寄存器DX中。
ADD AX,BXADD DX,AX(2)用基址变址寻址方式(BX和SI)实现AL寄存器的内容和存储器单元BUF中的一个字节相加的操作,和放到AL中。
mov bx, offset bufmov si,0ADD AL,BYTE PTR [BX][SI](3)用寄存器BX实现寄存器相对寻址方式(位移量为100H),将DX的内容和存储单元中的一个字相加,和放到存储单元中。
ADD 100H[BX],DX(4)用直接寻址方式(地址为0500H)实现将存储器中的一个字与立即数3ABCH相加,和放回该存储单元中。
ADD word ptr [0500H],3ABCH(5)用串操作指令实现将内存定义好的两个字节串BUF1和BUF2相加后,存放到另一个串BUF3中的功能。
……MOV CX,COUNTMOV SI,OFFSET BUF1 源串MOV DI,OFFSET BUF3 目的串MOV BX,OFFSET BUF2 辅助AGAIN:LODSBADD AL,[BX]STOSBINC BX 注意没有和KEP配合,所以CX - 1DEC CXJNZ AGAIN……3指出下列指令中,源操作数及目的操作数的寻址方式。
(1)SUB BX,[BP+35] ;寄存器寻址、寄存器相对寻址(2)MOV AX,2030H ;寄存器寻址、立即寻址串扫描指令(3)SCASB ;隐含操作数为寄存器寻址和寄存器间接寻址(4)IN AL,40H ;寄存器寻址、立即寻址(5)MOV [DI+BX],AX ;基址加变址寻址、寄存器寻址(6)ADD AX,50H[DI] ;寄存器寻址、寄存器相对寻址(7)MOV AL,[1300H] ;寄存器寻址、直接寻址(8)MUL BL ;寄存器寻址、目的操作数为隐含寄存器寻址4已知(DS)= 1000H,(SI)= 0200H,(BX)= 0100H,(10100H)= 11H,(10101H)= 22H,(10600H)= 33H,(10601H)= 44H,(10300H)= 55H,(10301H)= 66H,(10302H)= 77H,(10303H)= 88H,试分析下列各条指令执行完后AX寄存器的内容。
(1)MOV AX,2500H (AX)=2500H(2)MOV AX,500H[BX] (AX)==4433H [BX+500H] = [0600H](3)MOV AX,[300H] (AX)=6655H(4)MOV AX,[BX] (AX)=2211H(5)MOV AX,[BX][SI] (AX)=6655H(6)MOV AX,[BX+SI+2] (AX)=8877H5判断下列指令是否有错,如果有错,说明理由。