摘要:指令系统的意义 指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。 汇编语言的指令格式 指令助记符 [操作数1 [,操作数2]] [;注释] 指令助记符决定了指令的功能,对应一条二进制编码的机器指令。 指令的操作数个数由该指令确定,可以没有操作数,也可以有一个或多个操作数,大多数指令要显示写出来,还有...
阅读全文
随笔分类 - 每日一课
1
摘要:符号定义语句的目的是把一些经常使用的常量或数值表达式,使用一个符号来代替,这样不用在代码中逐个修改了,只需修改符号定义语句即可。 符号定义语句分为 1 等价语句 EQU 2 等号语句 = 3 符号名定义语句 LABEL 1 等价语句 格式为 符号名 EQU 表达式 比如可以用符号等价语句来代表常量或者表达式 NUMBER EQU 100 BUFF_LEN EQU N...
阅读全文
摘要:上一课写了N天才写完,幸好N小于10,哈哈。 表达式是程序设计中一个重要的基本概念,由运算符,操作符,括号,常量和一些符号连在一起的式子,在汇编语言中表达式分为:数值表达式,地址表达式。 一 进制伪指令RADIX 伪指令RADIX用来设置整数的缺省机制,宏汇编开始时所默认的整数进制为10进制,格式如下: .RADIX exp 伪指令要用.开始,exp是[2-16]之间的一个数字。 该伪...
阅读全文
摘要:一 标号 标号是特殊的标识符,代表代码段中某个具体位置,主要用于跳转指令的目标位置。说明形式如下: 标号: 汇编语句 ;注释 标号必须是合法标识符,在后面跟一个冒号,冒号和汇编语句用TAB或空格分隔开。 二 内存变量和标号的属性 变量是一个符号地址,其值会根据它代表的数据类型来对应从该地址以后若干个存储单元的数值。 标号也是一个符号地址,它所对应的存储单元中存放的是指...
阅读全文
摘要:一 联合类型 1 联合类型的说明 联合数据类型在内存中占用的内存单元的位数是联合数据类型中最大的字段的位数。 联合数据类型通过不同字段的引用,可以获取不同的值。但是他们共享整个数据区域,字段之间相互覆盖。 联合数据类型的各字段的偏移量都是0。 说明格式: [联合类型名] UNION [Alignment][, NONUNIQUE] 数据定义...
阅读全文
摘要:第13章是简单内存变量的定义的学习笔记,中间经过了调整偏移量的伪指令的学习,再继续学习复合内存变量的学习。 简单内存变量回顾: DB/BYTE(字节变量) DW/WORD(字变量) DD/DWORD(DoubleWord,双字,四字节) DF/FWORD(Farword,三字,六字节) DQ/QWORD(Quadword,四字,八字节) DT/TBYTE(Tenbytes,十字节) 1. 重复...
阅读全文
摘要:我感冒了,头重脚轻,思维迟钝,但还是勉强看明白了,等以后再回过头来看。 调整偏移量需要涉及到三个伪指令EVEN,ALIGN,ORG,还有一个偏移量计数器的值“$”。 首先要明白什么是偏移量,偏移量大多是指从一个数据段的起始地址到我们定义的内存单元之间相隔的距离。 调整偏移量的目的在于快速的得到一个字的内容。 EVEN是偶对齐伪指令 作用是让下一个定义的内存变量从下一个偶地址单元开始分配,如果...
阅读全文
摘要:标识符和表达式是程序设计经常用到的两个概念,在用高级语言编程的时候,如果程序要对某个变化的量进行处理时,通常要对该变化的量定义一个具有某种数据类型的符号名,用该符号名也就是使用了该变化量,在汇编语言中也是这样,不同的只是说明和引用的方式。 一 标识符 在汇编语言中,标号,内存变量名,子程序名和宏名等都是标识符,一般最多由31个字母,数字以及规定的特殊字符(? @ _ $)等组成,并且不能用数字开...
阅读全文
摘要:操作数就是指令或者程序的主要处理对象,只有很少数的指令不需要操作数,因为他们不具备数据处理功能,比如NOP空指令和HLT停机指令。 大多数指令的执行会涉及到操作数,所以指令中如何表达操作数或操作数所在位置是正确运用汇编指令的重要因素。 在指令中指令操作数或操作数存放位置的方法称为寻址方式。操作数的寻址方式是汇编语言进行程序设计的基础。 1. 立即数寻址方式 操作数作为指令的一部分直接写在指令...
阅读全文
摘要:存储器的管理模式 intel公司的80x86系列的CPU对内存的管理采用的是内存分段的方式。 1. 存储器的分段 计算机的内存管理单元是以“字节”为最小单位进行线性编址的,字节是80x86CPU对内存管理的基元。为了标识每个存储单元,就给每个存储单元规定一个编号,该编号就是内存单元的物理地址。 存储单元的物理地址是一个16位的二进制数,物理地址通常采用16进制书写。 16位CPU内部拥有20根...
阅读全文
摘要:专用寄存器有标志位寄存器Flag/EFlag, 段寄存器ES,CS,SS,DS,FS,GS。 标志位寄存器(Flag/EFlag) 16位CPU标志位寄存器有9个二进制位发挥了作用,分别是: 15 14 13 12 11 ...
阅读全文
摘要:通用寄存器的作用 数据寄存器不讲,简单的说,段寄存器(ES,CS,SS,DS,FS,GS)和变址寄存器(SI,DI)是配合使用访问段数据的,指针寄存器(BP,SP)是用来操作堆栈的,BP指向栈的基址,SP则永远指向栈顶。 另外指令指针EIP存放的是要执行的下一条指令在代码段里的偏移量,在实方式下,每个段的最大范围都是64K,所以EIP的高16位都是0。 ...
阅读全文
摘要:使用汇编编程时要直接操作硬件资源,如CPU内部资源,存储器和I/O端口,所以一定要学习并记住CPU内部寄存器的命名,功能以及常见的用途,感谢老天,寄存器并不是太多。还有要明白存储器的分段管理模式,存储单元的地址的表示法和物理地址的形成方式,当然也不难理解。 一 寄存器组 寄存器是CPU的内部数据存储资源,是汇编程序能用到的硬件资源之一,由于存取速度比内存快很多,所以在汇编写程序时,要尽可能充...
阅读全文
摘要:前面六课大体上让我们可以读懂一个汇编程序,现在开始正式学习汇编。 先是汇编的预备知识: 1. 汇编语言的主要特点 一般情况下一条汇编语句由汇编指令和操作数构成,比如MOV AX, BX,意思是把BX寄存器中的值赋予AX寄存器,MOV是汇编指令,AX和BX都是操作数,BX是源操作数,AX是目的操作数。由于CPU的不同,所支持的指令集也不同,所以汇编语言是依赖于具体的CPU的。 汇编语言和机器可以执...
阅读全文
摘要:1. 子程序的定义 如同C语言一样,汇编语言也具备结构化的能力。 首先说子程序的定义格式: 子程序名 PROC [NEAR | FAR] … ;子程序体 子程序名 ENDP PROC和ENDP是子程序的首尾标识,子程序名必须是相同的,子程序可以分为NEAR近调用和FAR远调用,所谓近调用就是只能在同一段内的其他程序调用,而远待用可以被不同段的程序调用。 2. 子程序的调用 所以,根...
阅读全文
摘要:1. TEST reg/mem, reg/mem/imm - 检测位指令 受影响标志位:CF(0),OF(0),PF,SF和ZF 功能:检测位指令会将源操作数和目标操作数进行逻辑与操作,根据运算结果设置标志位,但是并不保存运算结果到源操作数,只是设置标志位。该指令执行后通常是一条JE,JNE,JZ或JNZ等条件转移指令。 2. 循环指令 循环指令的执行本身并不影响任何标志位,以CX或ECX做为计...
阅读全文
摘要:逻辑运算指令是另外一组重要的常用指令,包括逻辑与AND,逻辑或OR,逻辑非NOT,和异或指令XOR。 1. AND reg/mem, reg/mem/imm - 逻辑与指令 受影响的标志位:CF,OF,PF,SF,ZF 功能:把源操作数和目的操作数进行二进制位的与操作,结果存入源操作数中。 2. OR reg/mem, reg/mem/imm - 逻辑或指令 受影响的标志位:CF,OF,PF...
阅读全文
摘要:算术运算指令是反映CPU运算能力的指令,也是编程时候最常用到的一组指令,包括加减乘除以及相关的辅助指令。 该组指令的操作数可以是8位,16位,32位(80386+),当存储单元是该类指令的操作数的时候,该操作数的寻址方式可以是任何一种存储单元的寻址方式。 1. 加法指令 ADD reg/mem, reg/mem/imm - 加法指令 受影响的标志位:AF CF OF PF SF ZF 功能...
阅读全文
摘要:先写几个英文简写及含义。 reg - 寄存器 mem- 内存 lmm - 立即数 1. 传送指令MOV reg/mem reg/mem/lmm 传送指令,相当于高级语言的赋值语句,把源操作数(reg/mem/lmm)传送到前面的寄存器和内存地址中。 2. 传送填充指令MOVSX/MOVZX reg/mem reg/mem/lmm 传送填充指令,和MOV语句具有相同功能的基础上,对目的操作数...
阅读全文
摘要:开始写每日一课,一共75篇,两个多月应该能写完。 1 通用寄存器: 寄存器是学习汇编知识时的第一课,常用寄存器如下: AX/EAX BX/EBX CX/ECX DX/EDX 是通用的数据寄存器 用于暂时存放计算过程中的操作数 结果 或者其他信息。他们可以分为两个独立的8位寄存器使用,AL/AH BL/BH CL/CH DL/DH,除了通用功能之外还有以下用途: AX/EAX作为累加器...
阅读全文
1