X86汇编语言
汇编语言基于x86处理器

汇编语言基于x86处理器
汇编语言是一种低级编程语言,用于与计算机硬件直接交互。
基于x86处理器的汇编语言主要用于编写针对x86架构的计算机程序。
x86处理器是一种广泛使用的处理器架构,包括Intel和AMD 等厂商生产的多个处理器系列。
在x86汇编语言中,程序员使用特定的指令集来操作寄存器、内存和其他硬件设备,实现计算机指令的精确控制和数据处理。
以下是一些基于x86处理器的汇编语言的特点和要点:
寄存器:x86处理器提供了多个通用寄存器,如AX、BX、CX、DX等,以及专用寄存器如指令指针寄存器IP、堆栈指针寄存器SP等。
程序员可以使用这些寄存器来存储数据、进行计算和操作。
指令集:x86汇编语言提供了广泛的指令集,包括数据传输、算术运算、逻辑运算、条件分支、循环控制等。
程序员可以使用这些指令来实现各种操作和算法。
内存访问:x86汇编语言可以直接访问内存,读取和写入数据。
程序员需要了解内存地址和数据类型的操作方式,以正确地操作内存中的数据。
栈操作:x86汇编语言中的栈用于存储局部变量、函数调用和
返回地址等信息。
程序员可以使用栈指针寄存器来管理栈,并使用相关指令进行入栈和出栈操作。
中断处理:x86处理器支持中断和异常处理机制。
程序员可以编写中断处理程序,以响应硬件中断或软件触发的异常情况。
编写基于x86处理器的汇编语言程序需要对x86架构的指令集和寄存器使用有深入的理解,以及对计算机硬件和操作系统的了解。
熟练掌握汇编语言的编写技巧和调试工具对于开发和调优x86汇编语言程序非常重要。
汇编语言基于x86处理器

汇编语言基于x86处理器汇编语言是一种低级编程语言,它直接操作计算机硬件进行指令级编程。
在x86架构下,汇编语言主要用于编写操作系统、驱动程序以及底层的系统软件。
以下是一些关于x86汇编语言的参考内容:1. x86处理器的架构和特点:x86处理器系列有很多型号和版本,比如Intel的Pentium和Core系列、AMD的Athlon和Ryzen系列等。
了解每种型号处理器的架构和特点对于编写高效的汇编程序非常重要。
2. 汇编语言的基本语法:汇编语言是一种低级语言,它使用汇编指令来直接操作计算机硬件。
了解汇编语言的基本语法,包括寄存器、指令和操作码等内容,是编写汇编程序的基础。
3. 寄存器和内存:在x86汇编语言中,寄存器是非常重要的概念。
了解常用的寄存器,如通用寄存器、段寄存器以及标志寄存器,以及寄存器的使用方法和操作规则,在编写汇编程序时能够更加灵活地使用寄存器。
4. 指令集和操作码:x86处理器支持的指令集非常丰富,包括算术和逻辑指令、数据传输指令、控制指令等。
了解常用的指令集和操作码,以及它们的使用方法和功能,是编写汇编程序的基础。
5. 汇编程序的编写和调试:了解如何编写和调试汇编程序,包括使用汇编器将汇编代码转换为机器码、使用调试器进行程序的调试和内存的查看等。
学习汇编程序的编写和调试技巧,能够更加高效地完成汇编程序的开发和调试任务。
6. 汇编程序的优化:汇编语言可以直接操作硬件,因此在一些对性能要求较高的场景,使用汇编语言编写程序可以实现更高效的代码。
了解汇编程序的编译器优化和硬件优化方法,可以提高汇编程序的执行效率。
7. 汇编语言应用案例:了解汇编语言在实际项目中的应用案例,包括操作系统、驱动程序、嵌入式系统等。
通过学习实际应用案例,能够更好地理解汇编语言在底层系统软件开发中的重要性。
总之,汇编语言是一种低级编程语言,基于x86处理器的汇编语言编程需要了解x86处理器的架构和特点,掌握汇编语言的基本语法、指令集和操作码,熟悉寄存器和内存的使用方法,以及编写和调试汇编程序的技巧。
简明x86汇编语言教程

第一章汇编语言简介先说一点和实际编程关系不太大的东西。
当然,如果你迫切的想看到更实质的内容,完全可以先跳过这一章。
那么,我想可能有一个问题对于初学汇编的人来说非常重要,那就是:汇编语言到底是什么?汇编语言是一种最接近计算机核心的编码语言。
不同于任何高级语言,汇编语言几乎可以完全和机器语言一一对应。
不错,我们可以用机器语言写程序,但现在除了没有汇编程序的那些电脑之外,直接用机器语言写超过1000条以上指令的人大概只能算作那些被我们成为“圣人”的牺牲者一类了。
毕竟,记忆一些短小的助记符、由机器去考虑那些琐碎的配位过程和检查错误,比记忆大量的随计算机而改变的十六进制代码、可能弄错而没有任何提示要强的多。
熟练的汇编语言编码员甚至可以直接从十六进制代码中读出汇编语言的大致意思。
当然,我们有更好的工具——汇编器和反汇编器。
简单地说,汇编语言就是机器语言的一种可以被人读懂的形式,只不过它更容易记忆。
至于宏汇编,则是包含了宏支持的汇编语言,这可以让你编程的时候更专注于程序本身,而不是忙于计算和重写代码。
汇编语言除了机器语言之外最接近计算机硬件的编程语言。
由于它如此的接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。
用汇编语言编写的程序的速度通常要比高级语言和C/C++快很多--几倍,几十倍,甚至成百上千倍。
当然,解释语言,如解释型LISP,没有采用JIT技术的Java虚机中运行的Java 等等,其程序速度更无法与汇编语言程序同日而语。
永远不要忽视汇编语言的高速。
实际的应用系统中,我们往往会用汇编彻底重写某些经常调用的部分以期获得更高的性能。
应用汇编也许不能提高你的程序的稳定性,但至少,如果你非常小心的话,它也不会降低稳定性;与此同时,它可以大大地提高程序的运行速度。
我强烈建议所有的软件产品在最后Release之前对整个代码进行Profile,并适当地用汇编取代部分高级语言代码。
至少,汇编语言的知识可以告诉你一些有用的东西,比如,你有多少个寄存器可以用。
汇编语言的分类

汇编语言的分类汇编语言是计算机编程中一种低级语言,用于将源代码转化为机器码以供计算机执行。
在计算机科学中,汇编语言可以根据不同的特性进行分类。
本文将介绍汇编语言的分类,并对每种分类进行详细说明。
一、按照使用的处理器进行分类根据所使用的处理器类型,汇编语言可以分为多类。
最常见的分类方式是根据处理器架构进行划分,主要包括x86汇编语言、ARM汇编语言和MIPS汇编语言等。
1. x86汇编语言:x86汇编语言是最广泛应用的汇编语言之一,主要用于x86架构的处理器,如英特尔的处理器和AMD的处理器。
x86汇编语言具有较高的执行效率和灵活性,广泛用于操作系统、驱动程序和嵌入式系统开发等领域。
2. ARM汇编语言:ARM汇编语言主要用于ARM架构的处理器,如移动设备和嵌入式系统中常见的ARM处理器。
ARM汇编语言具有较低的功耗和较高的性能,在移动应用、物联网和智能终端等领域得到广泛应用。
3. MIPS汇编语言:MIPS汇编语言用于MIPS架构的处理器,主要应用于嵌入式系统和网络设备等领域。
MIPS汇编语言具有简洁的指令集和高性能的特点,适用于资源有限的嵌入式系统。
二、按照指令系统进行分类根据指令系统的不同,汇编语言可以分为复杂指令集(CISC)和精简指令集(RISC)两类。
1. 复杂指令集(CISC):复杂指令集汇编语言具有丰富的指令集合和复杂的指令格式,可以实现多种功能。
CISC汇编语言中的每个指令可以执行复杂的操作,但由于指令集繁多,编程复杂度较高,难以提高执行效率。
2. 精简指令集(RISC):精简指令集汇编语言以简单、统一的指令格式为特点,指令集较为精简。
RISC汇编语言的每个指令只执行一项基本操作,简化了处理器的设计和编程的复杂性,并能够提高执行效率。
三、按照应用领域进行分类汇编语言还可以根据应用领域进行分类,不同应用领域对汇编语言具有不同的要求。
1. 系统级汇编语言:系统级汇编语言主要用于操作系统和底层系统软件开发,例如操作系统的内核、驱动程序等。
汇编语言基于x86处理器

汇编语言基于x86处理器
汇编语言是一种底层编程语言,它直接操作计算机底层硬件,不同于高级语言,比如C++和Java等。
汇编语言基于x86处理器,这是一种广泛使用的处理器架构,它被用于大多数的个人计算机以及服务器等设备。
x86处理器架构是由英特尔公司于1978年推出的,它包括了多个版本,如x86-32和x86-64等。
x86-32是一个32位的处理器架构,而x86-64是一个64位的处理器架构。
汇编语言可以在不同版本的x86处理器上运行,但需要进行一些语法上的调整。
汇编语言的编写需要根据特定的处理器架构来进行,因为不同的处理器架构有不同的指令集,即不同的操作码。
指令集定义了可用的指令以及它们的操作方法,这些指令可以让程序员直接控制处理器的执行。
汇编语言程序员需要学习处理器的指令集,并且熟悉不同的指令及其使用方法,才能编写出有效的程序。
汇编语言的主要优点是它可以直接操作底层硬件,因此可以实现非常高效的程序。
但相对于高级语言,汇编语言的缺点是编写的程序通常比较难读懂,也比较难以维护。
此外,汇编语言编写的程序通常比高级语言的程序更容易受到安全漏洞的影响,因为它可以直接操作计算
机的内存和寄存器。
汇编语言的种类

汇编语言的种类汇编语言是计算机领域中的一门编程语言,它与机器语言密切相关,用于书写可以被计算机直接执行的程序代码。
汇编语言直接操作计算机底层硬件,因此在性能和效果上具有很大优势。
在汇编语言中,不同的体系结构和处理器都有不同的指令集和语法规则,这导致了汇编语言的种类繁多。
本文将介绍几种常见的汇编语言。
1. x86汇编语言x86汇编语言是最为广泛应用的汇编语言之一,在PC和服务器领域得到广泛使用。
x86指令集是英特尔和AMD等处理器厂商所采用的指令集架构,在x86汇编语言中,可以直接操作寄存器、内存以及其他外设,具有很高的灵活性和可操作性。
x86汇编语言使用Intel语法和AT&T语法两种不同的语法规则,常用的编译器有MASM、NASM和GAS。
2. ARM汇编语言ARM汇编语言广泛应用于移动设备、嵌入式系统和物联网等领域。
ARM处理器以其低功耗、高性能和内容丰富的架构而闻名,ARM汇编语言可以直接操作处理器寄存器、存储器和外设,具有很好的可移植性和可扩展性。
ARM汇编语言使用ARM体系结构定义的指令集和语法规则,常用的编译器有ARM汇编器和GNU汇编器等。
3. MIPS汇编语言MIPS汇编语言被广泛应用在嵌入式系统、数字信号处理以及网络设备等领域。
MIPS处理器以其简洁的指令集和高效的架构而著称,MIPS汇编语言可以直接控制寄存器、存储器以及其他外设,具有很高的执行效率和指令流水线能力。
MIPS汇编语言使用MIPS体系结构定义的指令集和语法规则,常用的编译器有MIPS汇编器。
4. PowerPC汇编语言PowerPC汇编语言主要应用于IBM PowerPC架构的服务器、工作站以及游戏机等领域。
PowerPC处理器以其高性能和可扩展性而著称,PowerPC汇编语言可以直接操作处理器寄存器、存储器和外设,具有很好的可移植性和性能表现。
PowerPC汇编语言使用PowerPC指令集和语法规则,常见的编译器有PowerPC汇编器。
汇编语言种类

汇编语言种类
汇编语言是一种极为底层的编程语言,其主要功能是将人类易于理解的高级语言转换成机器可执行的低级语言。
随着计算机技术的不断发展,汇编语言的应用范围也越来越广泛。
目前,主要有以下几种汇编语言:
1. x86汇编语言
x86汇编语言是目前应用最广泛的汇编语言之一,特别是在个人电脑和服务器上。
它最早出现在英特尔的16位处理器上,目前已经发展成为可以支持64位处理器的一种汇编语言。
x86汇编语言的使用范围非常广泛,例如操作系统、编译器等大型软件中都会大量使用。
2. ARM汇编语言
ARM汇编语言是一种轻量级、低功耗的汇编语言,它主要应用于嵌入式系统、移动设备、消费类电子产品等领域。
相比x86汇编语言,ARM汇编语言的代码更加紧凑,执行效率更高。
3. MIPS汇编语言
MIPS汇编语言是一种32位RISC(精简指令集计算机)体系结构的汇编语言,主要用于嵌入式系统、网络设备、数字视频等领域。
其指令集极为精简,执行效率较高且可定制性强。
4. AVR汇编语言
AVR汇编语言是一种基于8位微处理器的汇编语言,主要用于嵌入式系统、数字信号处理等领域。
AVR汇编语言的代码具有很强的可读性和易于调试的特点。
总之,汇编语言虽然种类不同,但其基本原理和操作方式都十分
相似,学习一种汇编语言后再学习其他汇编语言就会相对容易了许多。
同时,在实际开发中,也需要根据具体应用场景选择最适合的汇编语言,以获得更好的性能和效率。
汇编语言的类型

汇编语言的类型汇编语言是一种低级语言,它是由机器指令和汇编指令组成的。
汇编语言是一种直接操作计算机硬件的语言,它可以直接控制计算机的各种硬件资源,如CPU、内存、I/O等。
汇编语言的类型主要有以下几种:1. x86汇编语言x86汇编语言是一种基于Intel x86架构的汇编语言,它是目前最为流行的汇编语言之一。
x86汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。
x86汇编语言的语法比较复杂,需要掌握大量的指令和寄存器,但是它可以实现非常高效的程序设计和优化。
2. ARM汇编语言ARM汇编语言是一种基于ARM架构的汇编语言,它是嵌入式系统和移动设备上最为流行的汇编语言之一。
ARM汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。
ARM汇编语言的语法比较简单,但是需要掌握大量的指令和寄存器。
3. MIPS汇编语言MIPS汇编语言是一种基于MIPS架构的汇编语言,它是嵌入式系统和网络设备上常用的汇编语言之一。
MIPS汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。
MIPS汇编语言的语法比较简单,但是需要掌握大量的指令和寄存器。
4. AVR汇编语言AVR汇编语言是一种基于AVR架构的汇编语言,它是嵌入式系统和单片机上常用的汇编语言之一。
AVR汇编语言可以直接操作CPU 的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。
AVR汇编语言的语法比较简单,但是需要掌握大量的指令和寄存器。
5. PowerPC汇编语言PowerPC汇编语言是一种基于PowerPC架构的汇编语言,它是IBM和苹果电脑上常用的汇编语言之一。
PowerPC汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。
PowerPC汇编语言的语法比较复杂,需要掌握大量的指令和寄存器,但是它可以实现非常高效的程序设计和优化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编(破解系列基础)(王爽汇编语言笔记第一版2013-8-1)(王爽汇编语言笔记第二版2013-8-11)笔记目录:第一章:基础知识(机器语言与汇编语言,及8086cpu的地址数据控制总线。
)第二章:寄存器cpu工作原理(寄存器的初步认识,字和字节概念,最主要的是8086cpu物理地址的表达方法,及汇编开始执行代码段。
)第三章:寄存器的内存访问(cpu是如何访问内存的,并附加一些简单的汇编指令,重要的是栈概念的引入。
)第四章:第一个程序(==,主要记录DEBUG是怎么用的......)第五章:[bx]和loop指令(循环的引入,及段前缀的概念。
)第六章:包含多个段的程序(包含多个段使程序使数据代码栈更加清晰)第七章:更灵活的定位内存地址的方法(引进SI DI16寄存器使程序寻址更加方便,模拟高级语言中数组和结构体表达,及and和or指令汇编指令。
)第八章:数据处理的两个基本问题(==)第九章:跳转指令的原理(jmp jcxz各种跳转地址表达方法,及offset操作符。
)第十章:call和ret(最重要,类似高级语言中函数的功能。
)第十一章:标志寄存器(各种”jump”,各种标志位...每次执行后可由标志位判断数据处理情况,破解中尤其重要。
)第一章:基础知识1:【机器语言】(010000001000000)0和1的组成2:【汇编语言】:每条汇编指令对应一条机器语言13BE:0100B80010MOV AX,1000(B8对应AX,0010高低字节对应1000,第十章中有详细的解释)3:【CPU对内存的读写】(8086CPU,X86)CPU到内存3条总线:控制总线地址总线数据总线①地址总线(内存索引):8086CPU一共16条,每条传送0或1。
②数据总线(CPU与外部的传送速度)③控制总线(多少种控制总线是CPU对外界器件有多少种控制,有些命令是几根控制线综合发出的)4:【RAM(随机储存)和ROM(只读储存)】RAM和ROM是内存,硬盘是外存。
①RAM主随机存储器②ROM刷BIOS储存引导设置(把病毒刷入BIOS…^^)③接口卡RAM比如显存第二章:寄存器CPU工作原理5:【8086CPU的寄存器】通用类:AX BX CX DX,16位寄存器。
通用类又可以分为高段(AH)低段(AL),也就是高字节和低字节8位段地址类:CS(代码段地址)DS(数据段地址)SS(栈段)ES(混合类)6:【段地址*16(十进制)+偏移地址=物理地址】【段地址*10H(十六进制)+偏移地址=物理地址】两个表达式表达的意思是一样的8086CPU内存空间有1MB,但8086CPU的地址总线只有十六位,2的16次方等于65536(0~65535)等于十六进制的FFFF,65536B/1024=64kb,也就是一个段的长度。
最后引进了段地址*16(十进制)+偏移地址=物理地址。
因为物理地址表达方法是十六进制*16相当于把十六进制向前移了1位,4个二进制等于16进制,FFFFF(10485575)/1024=1023KB(0~1023KB),【2的20次方等于10485575/1024=1024kb】1024KB等于1MB,所以段地址只用移一位在加上偏移地址,用【段地址:偏移地址】(debug)的方法就可以表达8086CPU索引的1MB了。
1230H=100100011000012300H=10010001100000000(二进制左移四位)12300H1230H*10H=12300HFFFFFH=FFF0*10H+FF7:【CS和IP(跳到哪执行)】CS段地址*10H+IP(偏移地址)=CS:IP(debug)汇编:修改CS和IP值(JMP CS:IP)直接跳转到某地址。
Debug:-R CS-R IPCS(代码寄存器)指到的内存段,当作代码要执行,执行汇编语句。
和DS一样的是数据都是十六,但一个解释为数据,一个解释为执行命令。
CS和IP决定从哪执行,把后面的数据当代码执行。
8:【Debug(调试程序)】-R查看寄存器值-T执行(CS:IP)-A写汇编指令-U查看(内存地址十六进制汇编指令)-D查看(二进制)-D段地址:偏移地址首偏移地址尾-E改写内存第三章:寄存器(内存访问)9:【内存器中字的存储】2byte=1字,8bit=1byte。
一个十六进制是4位二进制ADBF是一个字,AD,BF 是一个字节,对字于分低字节高字节。
例如:1单元D82单元263单元17一个字获取两个单元,1的地址单元字的数据是是26D8,因为2的地址单元是高字节,从高字节到低字节读(字的读法)10:【DS和address】DS从内存地址中读数据。
MOV AX,1000HMOV DS,AXMOV BL,[0]前面两句获取内存地址,1000(DS)是数据段段地址,[0]是偏移地址,1000:0。
MOV AL,[0]和MOV AX,[0]区别,一个是把地址当字节(八位)传送,一个是把他当字(十六位)传送,如果是MOV AX,[0]那么AX读取的地址是10001H(高字节)10000H(低字节)11:【栈】先进后出,后进先出。
栈底(高地址)栈顶(低地址),PUSH ax(将AX中数据推进栈中)POP AX(将栈顶的数据取出放入AX)SS:SP栈顶是随时变化的,SS:SP始终指向栈顶。
SS是段地址,SP栈顶偏移地址。
PUSH 推进栈时,栈顶向地址向低物理地址,所以SP-2。
POP出栈时SP+2逐步朝向栈底。
栈空时不存在栈,指向栈空间下一个单元。
PUSH:执行PUSH时,SP先-2,指向准备压入数据的低字节(从图中可看出高字节在下,低字节在上)POP:执行POP时,先将SS:SP指向的数据送入寄存器中,然后POP+2指向新的栈顶。
空栈:空栈时,SP指向栈空间的下一个单元,可以想象PUSH压栈SP-2,向上移两个单元,SP-1放高字节,SP-2放低字节。
也可以想象栈中只有两个单元时POP的情况...第四章:第一个程序13:汇编指令(翻译为机器码,比如MOV)伪指令(由编译器处理,比如assume ends)14:debug追踪查看。
编译的EXE文件所在的目录J:\new\debug new.exe(new.exe是编译过的文件)Debug的追踪数据,CX是文件的长度(字节),程序刚开始追踪,CX没有设值时。
程序加载的过程,首先找一段内存空间(SA),它的前256字节(100H)存放的是PSP (CMD与DEBUG交换数据区域),然后把它SA存入DS中。
总结表达是SA+10H:0000(程序的代码存放地址)SA+10H段地址,计算内存物理地址方法。
段地址×10H+偏移地址(0000)。
(SA+10H)×10H+0000,PSP(100H,256字节)目前来说上面的PSP不重要==第五章:[BX]和LOOP指令15:【[BX]和LOOP】[bx]偏移地址LOOP:循环,CX记循环次数。
每次执行到LOOP标号,CX-1,如果CX=0跳出循环,否则一直执行...嵌套循环时要注意CX多次赋值导致的程序错误。
点我寻找解决方法LOOP标号标号编译器会翻译成执行语句的偏移地址(IP),loop的最大距离FF的正负补码形式,后面会有详细的解释。
16:【LOOP和[BX]的联合应用】原题是将FFFF:0H~FFFF:BH中的字节数据相加,8位字节型不可直接加到16位的寄存器上,这样可能出现错误。
于是有了一种方法,简单的说是把字节数据放到低8位中,高8位设0,然后把高8为低8位结合成16位后。
17:【段前缀和一段安全的空间】修改默认的DS段寄存器,比如MOV AX,SS:[0]。
段地址SS偏移0单元内容放到AX 中。
一段安全空间,0:200~0:2FF。
第六章:包含多个段的程序18:【包含多个代码段程序】汇编查的地址不同,翻译的语句不同(一个字节内容对应指令,没有设入口点一堆字节乱对应)。
设置入口点辨别代码从哪个地址开始翻译。
使用入口标志符,前面的可以用DW定义数据,执行的时候从开始标识符执行CS:IP CS段地址不变IP加偏移19:【在代码段中使用数据】方法如同在代码段中使用数据一样(入口标识符前定义),如果定义8个字单元(0~15)数据,和8个字单元栈(16~31),因为栈的初始化是空的一堆0,所以sp指向的栈顶+2也就是栈的下一字节。
20:【包含多个段的程序】【assume cs:a,ds:b,ss:c】【mov ax,b mov ds,ax】第七章:更灵活定位内存地址的方法21:【AND和OR】AND和OR的运算补充:【XOR和NOT】XOR异或逻辑运算:XOR操作数一,操作数二,如果两个数相等为假,两个书不想等为1。
NOT非逻辑运算,NOT操作数一,对操作数取反吧==。
22:【ASCII】128位标准ASCII码,及扩展ASCII码。
23:【字符形式给出的数据】【db‘A’】定义的字节数据【dw‘A’】定义的字数据,A是字型的。
【db1,2,3】定义的1,2,3是字节数据。
24:【SI和DI】SI和DI十六的寄存器,作用和BX相似但不可以拆分成两个8位寄存器25:【bx+idate】偏移地址的组合,灵活运用。
比如【二维数组】26:【bx+si】比如【嵌套循环】,由于循环LOOP与CX绑定,所以进入第二层循环时会覆盖第一层循环导致程序错误。
这时栈便发生了他的作用,先进后出,可以用栈PUSH外层数据后进入内层循环,内层循环后在用POP恢复外层数据。
27:【bx+si+idata】……注意:[DI+SI]不可以用这种表现方式,BX是女的,SI和DI是男的。
[SI+DI]等于搞基。
第八章:数据处理两个基本问题28:【BX DI SI BP】BP默认段地址在SS中。
29:【数据处理位置的表达】1:立刻数直接包含在机器码中的数据(执行前在CPU缓冲器中)2:寄存器指令要处理的数据在寄存器中3:段地址×16+偏移地址指令要处理的数据在指定的内存中以上三种数据位置表达方式的翻译。
30:【寻址方式】1:直接寻址mov ax,[0]2:寄存器间接寻址mov ax,bx3:寄存器相对寻址mov ax,[bx+1]4:基址变址寻址mov ax,[bx+si]5相对基址变址寻址mov ax,[bx+si+idate] 31:【指令要处理的数据是多长】1:在寄存器位数的情况下MOV AX,10H这个指令处理16位MOV AL,10这个指令处理8位……2:在没有寄存器位数的情况下push AX栈一次推进2字节(sp-2)…….3:ptr指令制定访问单元是byte还是wordmov byte ptr ds:[10],1ds:[10]01mov word ptr ds:[10],1ds:[11]01ds[10]0032:【寻址方式的综合利用】模拟高级语言的数组及结构体33:【div指令】纠结的除法指令==,被除数放在AX或AX和DX中。