标题和描述中的“Assembly隨身筆記”及“Assembly語法,指令,結構與應用,方便查詢”指明了这是一份关于汇编语言(Assembly)的笔记,旨在记录和解释汇编语言的各种语法、指令及其应用,以便于快速查阅和学习。下面,我们将根据给定的部分内容详细解析其中涉及的关键知识点。 ### 汇编语言调用指令(CALL) 在汇编语言中,`CALL`指令用于执行子程序调用,即将控制权转移到一个指定的地址。给定文件中列出了几种不同类型的`CALL`指令: - `CALLаO(PUSHUOIP)IPD`:这是一个简单的`CALL`指令,通过将当前指令指针(IP)压入堆栈,然后将IP设置为`аO`指向的地址,从而调用子程序。 - `CALLFARPTRаO(PUSHCS,PUSHIP)CS&IPD`:此指令调用了一个远过程,不仅将IP压入堆栈,还将代码段寄存器CS压入,确保在返回时可以正确恢复代码段和指令指针。 - `CALLqμȦs(PUSHIP)IPD`:类似于前两种调用,但具体操作可能依赖于特定的处理器架构或模式。 - `CALLWORDPTRϬqȦs:[0](PUSHIP)IPD` 和 `CALLDWORDPTRϬqȦs:[0](PUSHCS,PUSHIP)IP<=DS:[0]&CS<=DS:[2]D`:这些指令分别用于调用字节指针和双字指针所指向的子程序,涉及到数据段的访问。 ### 返回指令(RET) - `RET(POPIP)` 和 `RETF(POPIP,POPCS)`:`RET`指令用于从子程序返回,通常从堆栈中弹出之前存储的指令指针IP,使程序控制权回到调用位置。`RETF`除了弹出IP,还弹出代码段寄存器CS,适用于远过程调用的返回。 ### 视频内存和字符编码 - “80*25ܽwİB8000H-BFFFFH@32KB.” 这部分描述了视频缓冲区的大小和地址范围。一个80列×25行的文本模式下,每个字符占据2字节(1个ASCII码值和1个属性字节),总共有2000行×2字节=4KB。整个视频缓冲区是32KB,因此可以容纳8个这样的屏幕。 - “1Ӧr2BYTE(1*ASCII+1*ݩ)” 进一步说明每个字符占用的空间,包括1个ASCII码值和1个属性字节。 ### 条件跳转和无条件跳转指令 - `JCXZаO(pGCX=0,hܼаOIP)`:如果计数寄存器CX为零,则跳转到`аO`。 - `JMPаO(IPD)` 和 `JMPqμȦs(MOVIP,AX)`:无条件跳转指令,前者直接跳转到`аO`,后者通过将AX的内容赋给IP实现跳转。 - `JMPFARPTRаO(CS&IPD)` 和 `JMPWORDPTRϬqȦs:[0](IP<=DS:[0],CS<=DS:[2])`:用于远跳转和通过字节指针进行的跳转。 ### 数据传送指令(MOV) - `MOVAX,OFFSETаO(аOIPmAX)`:将`аO`的偏移量加载到AX寄存器。 - 大量的`MOVAX,DS:[...+...]`指令示例展示了如何通过不同的寻址方式(如基址加变址、基址加索引等)从数据段读取数据到AX寄存器。 ### 算术运算指令 - `ADDAX,AX` 和 `ADDAX,DS:[0]`:将AX寄存器与自身或数据段的值相加。 - `ADDWORDPTR[BX],38`:向字指针[BX]所指向的值添加38。 ### 除法指令(DIV) - `DIVO(k)`:除法指令,k可以是1字节或2字节的操作数,分别用于8位和16位的除法操作。 - `DIVBYTEPTRϬqȦs:[0]` 和 `DIVBYTEPTR[BX+SI+8]`:用于字节指针所指向的值的除法操作。 - `DIVWORDPTRϬqȦs:[0]` 和 `DIVWORDPTR[BX+SI+8]`:用于字指针所指向的值的除法操作。 ### 乘法指令(MUL) - `MULO(k)`:乘法指令,k同样可以是1字节或2字节的操作数,分别用于8位和16位的乘法操作。 - `MULAX` 和 `MULDS:[0]`:将AX与自身或数据段的值相乘。 - `MULBYTEPTRDS:[0]` 和 `MULWORDPTRDS:[0]`:通过字节或字指针所指向的值进行乘法操作。 ### 堆栈段定义 - `STACKSEGMENT` 和 `STACKENDS`:定义堆栈段,使用`DD8DUP(0)`预留内存空间。 这些知识点涵盖了汇编语言的基本语法、指令集和结构,是理解和使用汇编语言的基础。
- 粉丝: 2
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助