档案的基本属性:段的基本属性

在通常情况下个复杂应用会由若干个模块组成个模块又会含有多个段而区别模块段的间、同模块段的间往往存在某种联系这种联系就要体现在段属性介绍说明上 段定义般格式如下: 段名SEGMENT [对齐类型] [组合类型] [类别] … 段名ENDS 段属性“对齐类型”、“组合类型”和“类别”要按此顺序介绍说明但这些可选项可根据需要选择书写如果源中不指定某个属性那么汇编将使用... [阅读全文]

class:类别(CLASS)和段组(GROUP)

类别(CLASS) 类别是个由员指定用单引号括起来串如果个段没有给出类别那么这个段类别就为空类别是用于段分类连接利用该类别来调整同名、同类别段并使它们相邻典型类别是\"Data\"和\"Code\"如果指定某段类别是\"Code\"那么该段最好是代码段这样有调试(如:CodeView)就可以顺序工作 例如: DATA1SEGMENT WORD PUBLIC ... [阅读全文]

压缩语段下定义:简化的段定义

前面我们介绍了完整段定义格式用完整段定义格式虽然可以控制段各种属性但员很少会这样做现在汇编提供了种简化段定义方式它使定义段更简单、方便 6.4.1 存储模型介绍说明伪指令 在使用简化段定义方式的前必须使用存储模式介绍说明伪指令来描述源所采用存储模式该伪指令说所使用存储模式汇编将用该存储模式生成相应ASSUME和GROUP语句同时也为其它简化段创建等价预定义 存储... [阅读全文]

伪指令定义:简化段定义伪指令

简化段定义伪指令在介绍说明个新段即将开始同时也介绍说明了上个段结束在本段定义结束时也不必用伪指令“ENDS”来标识 具体伪指令介绍说明形式及其功能描述如下: 1、代码段定义 .CODE 作用:介绍说明其下面内容是代码段中内容 2、堆栈段定义 .STACK [堆栈字节数] 其中“堆栈字节数”可以不写其缺省值为1024B 3、数据段定义 .DATA / .DATA... [阅读全文]

越剧名段:简化段段名的引用

当使用简化段定义时般情况下员可以不知道这些段段名、段地址堆齐类型和组合类型等但当把简化定义段和标准定义段混合使用时就需要知道简化定义段基本属性表6.3是在小模式下段基本属性对应表 表6.3 小模式下简化段定义缺省属性表 伪指令缺省段名对齐类型组合类型类别段组名 .CODE_TEXTWORDPUBLIC’CODE’  .FARDATAFAR_DATAPARANON... [阅读全文]

伪指令:源程序的辅助说明伪指令

除了以上些使用率较高伪指令外还有些使用频率不太高其它伪指令下面仅列举几个这样伪指令 6.5.1 模块名定义伪指令NAME 模块名定义伪指令NAME介绍说明该源模块名该伪指令般格式如下: NAME [模块名串] 6.5.2 页面定义伪指令PAGE 在源开始可用伪指令PAGE介绍说明每页最大行数、每行数该伪指令般格式为: PAGE [[行数], 宽度] 其中:“... [阅读全文]

子程序:汇编子程序和库

7.1 子定义 如果某段在源内反复出现那么就可把该段定义为子这样可以缩短源长度、节省目标存储空间也可提高可维护性和共享性 定义子般格式如下: 子名PROC [NEAR | FAR] …;子体 子名ENDP 对子定义具体规定如下: 、“子名”必须是个合法标识符并前后 2者要致; 、PROC和ENDP必须是成对出现关键字它们分别表示子定义开始和结束; 、子类型有近(... [阅读全文]

子程序调用:子程序的调用和返回指令

子和返回是对互逆操作也是种特殊转移操作 方面的所以说是转移是当个子时执行顺序被改变CPU将转而执行子中指令序列在这方面子操作含有转移指令功能子返回指令转移特性和此类似; 另方面转移指令是种“去不复返”操作而当子完后还要求CPU能转而执行指令的下指令它是种“有去有回”操作 为了满足子和返回操作特殊性在指令系统中设置了相应特定指令 7.2.1 指令(CALL) 子... [阅读全文]

子程序调用:子程序的调用和返回指令

子和返回是对互逆操作也是种特殊转移操作 方面的所以说是转移是当个子时执行顺序被改变CPU将转而执行子中指令序列在这方面子操作含有转移指令功能子返回指令转移特性和此类似; 另方面转移指令是种“去不复返”操作而当子完后还要求CPU能转而执行指令的下指令它是种“有去有回”操作 为了满足子和返回操作特殊性在指令系统中设置了相应特定指令 7.2.1 指令(CALL) 子... [阅读全文]

ret指令:返回指令(RET)

当子程序执行完时,需要返回到调用它的程序之中。为实现此功能,指令系统提供了一条专用的返回指令。其格式如下: RET/RETN/RETF[Imm] 子程序的返回在功能上是子程序调用的逆操作。为了与子程序的远、近调用相对应,子程序的返回也分:远返回和近返回。返回指令在堆栈操作方面是调用指令的逆过程(如图7.3所示)。其具体规定如下: 、在近类型的子程序中,返回指令RET是近返回,其功能是把栈顶之值弹出... [阅读全文]

子程序调用:子程序的调用和返回指令子程序举例

编写个子UPPER实现把寄存器AL中存放变大写解: ;子功能:把AL中存放变大写 ;入口参数:AL ;出口参数:AL ;算法描述:判断AL中必须在’a’~’z’的间才能把该变为大写 UPPERPROC CMPAL, ’a’;书写’a’ASCII码61H也可以 JBover CMPAL, ’z’ JA over SUBAL, 20H;书写指令AND AL, 0DF... [阅读全文]

子程序:子程序的参数传递

子般都是完成某种特定功能段当个个子时通常都向子传递若干个数据让它来处理;当子处理完后般也向它传递处理结果我们称这种在和子的间信息传递为参数传递 用向子传递参数称为子入口参数子向它传递参数称为子出口参数子入口参数和出口参数都是任意项对某个具体子来说要根据具体情况来确定其入口和出口参数也可以 2者都没有 和被子的间参数传递思路方法是员自己或和别人事先约定好信息传递思... [阅读全文]

存储单元:存储单元传递参数

在子时当需要向子传递大量数据时因受到寄存器容量限制就不能采用寄存器传递参数方式而要改用约定存储单元传送方式这种参数传递方式有点象情报人员和联络人员的间传递信息方式个向指定地点放情报另个从指定地点取情报 例7.2是采用约定存储单元传递参数例子所处理数据不是直接传给子而是把存储它们地址告诉子 例7.4:编写个子分类统计出个串中数字、字母和其它个数该串首地址用DS:... [阅读全文]

传递参数:堆栈传递参数

堆栈是个特殊数据结构它通常是用来保存返回地址当用它来传递参数时势必会造成数据和返回地址混合在起局面用起来要特别仔细 具体做法如下: (1)、当用堆栈传递入口参数时要在子前把有关参数依次压栈子从堆栈中取到入口参数; (2)、当用堆栈传递出口参数时要在子返回前把有关参数依次压栈(这里还需要做点额外操作要保证返回地址定在栈顶)就可以从堆栈中取到出口参数 在通常情况下我... [阅读全文]

锁存器与寄存器:寄存器的保护与恢复

由于计算机硬件资源只有套当子修改了寄存器内容后返回到它时这些寄存器内容也就不会是子前内容这样子修改寄存器内容就可能变成了它副作用这种副作用常常会导致出错为此在编写子时除了能对作为入口和出口参数寄存器进行修改外对其它寄存器修改对来说都要是透明也就是说在子指令前后除了作为入口和出口参数寄存器内容可以区别外其它寄存器内容要保持不变有时也要求作为入口参数寄存器内容保持不... [阅读全文]

子程序或函数未定义:子程序的完全定义

在7.1节所给出子定义格式是个最基本、最简单定义格式它不能为子提供更简洁方式在宏汇编MASM 6.11系统中为微机汇编语言子提供了更加丰富定义方式 虽然子这种定义方式显得稍微有点复杂但它不仅为子带来了极大方便而且其方式和高级语言中子方式相致这就大大地降低了员熟练掌握它难度 7.5.1 子完全定义格式 子名PROC[distance] [langtype] [vi... [阅读全文]

子程序:子程序的位距

子位距(Distance)有:Near、Far、Near16、Far16、Near32和Far32 子位距描述符告诉汇编该子是在本段的内(Near)还是在本段的外(Far)Near和Far描述符表示使用当前段规模(Segment Size)Near16、Far16、Near32和Far32描述符是告诉汇编忽略当前段规模而使用指定16位或32位段规模 若选用类型N... [阅读全文]

子程序:子程序的可见性

子可见性(Visibility)决定该子对其它模块是否可用它共有 3个属性值:PRIVATE、PUBLIC和EXPORT PUBLIC属性是子标准缺省属性但该缺省属性可以用伪指令OPTION PROC来修改EXPORT属性意味着该子是个“远”、具有PUBLIC属性子并要求连接在生成可执行文件时把其入口地址放入导出入口地址表中 例如: OPTION PROC : ... [阅读全文]

寄存器:寄存器的保护和恢复

保护寄存器介绍说明子句介绍说明格式: USES 寄存器列表 该介绍说明子句要求汇编为其生成保护和恢复寄存器指令序列即:在进入子执行指令的前把寄存器列表中寄存器压进堆栈在结束子执行时把先前压进堆栈寄存器弹出以达到保护寄存器目 寄存器列表:列举出在子中需要保护寄存器名即:在子开始时需要把内容进栈寄存器名若有多个寄存器名则在寄存器名的间要用“空格”来分开 例如: D... [阅读全文]

子程序:子程序的参数传递

子参数是用来向子传递信息数据若有多个参数则参数的间要用逗号分割为了能介绍说明子参数员必须事先指定参数所遵循语言类型或使用“语言类型”参数 参数数据类型可以是任何个有效数据类型介绍说明符或VARARGVARARG数据类型允许向子传递“个数”不定参数其参数的间要用逗号“”来分开 若参数表中含有VARARG介绍说明参数那么该参数定是该子最后个参数其规定隐含地介绍说明了... [阅读全文]

循环移位:汇编循环移位指令

循环移位指令有:循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right) 指令格式:ROL/ROR Reg/Mem, CL/Imm 受影响标志位:CF和OF 循环左移/右移指令只是移位方向区别它们移出位不仅要进入CF而且还要填补空出位具体功能如下图(a)、(b)所示 (a)、ROL(b)、ROR 下面是几个循环移位例子及其执行结果 循... [阅读全文]

循环移位:带进位的循环移位指令

带进位循环移位指令 带进位循环移位指令有:带进位循环左移RCL(Rotate Left Through Carry)和带进位循环右移RCR(Rotate Right) 指令格式:RCL/RCR Reg/Mem, CL/Imm 受影响标志位:CF和OF 带进位循环左移/右移指令只有移位方向区别它们都用原CF值填补空出位移出位再进入CF具体功能如下图(a)、(b)所... [阅读全文]

汇编位操作指令

1、位扫描指令(Bit Scan Instruction) 指令格式:BSF/BSR Reg, Reg/Mem     ;80386+ 受影响标志位:ZF 位扫描指令是在第 2个操作数中找第个“1”位置如果找到则该“1”位置保存在第操作数中并置标志位ZF为1否则置标志位ZF为0 根据位扫描方向区别指令分 2种:正向扫描指令和逆向扫描指令 、正向扫描指令BSF(B... [阅读全文]

汇编位检测指令(Bit Test Instruction)

位检测指令(Bit Test Instruction) 指令格式:BT/BTC/BTR/BTS Reg/Mem, Reg/Imm    ;80386+ 受影响标志位:CF 位检测指令是把第个操作数中某位值传送给标志位CF具体哪位由指令第 2操作数来确定 根据指令中对具体位处理区别又分下几种指令: BT:把指定位传送给CF; BTC:把指定位传送给CF后还使该位变... [阅读全文]

汇编比较运算指令

在中我们要时常根据某个变量或表达式取值去执行区别指令从而使表现出有区别功能为了配合这样操作在CPU指令系统中提供了各种区别比较指令通过这些比较指令执行来改变有关标志位为进行条件转移提供依据 1、比较指令CMP(Compare Instruction) 指令格式:CMP Reg/Mem, Reg/Mem/Imm 受影响标志位:AF、CF、OF、PF、SF和ZF 指... [阅读全文]

汇编循环指令

循环结构是 3大结构的为了方便构成循环结构汇编语言提供了多种循环指令这些循环指令循环次数都是保存在计数器CX或ECX中除了CX或ECX可以决定循环是否结束外有循环指令还可由标志位ZF来决定是否结束循环 在高级语言中循环计数器可以递增也可递减但汇编语言中CX或ECX只能递减所以循环计数器只能从大到小在中必须先把循环次数赋给循环计数器 汇编语言循环指令都是放在循环体... [阅读全文]

汇编循环指令2

2、相等或为零循环指令(Loop While Equal or Loop While Zero) 相等或为零循环指令般格式: LOOPE/LOOPZ 标号 LOOPEW/LOOPZW 标号  ;CX作为循环计数器80386+ LOOPED/LOOPZD 标号   ;ECX作为循环计数器80386+ 这是组有条件循环指令它们除了要受CX或ECX影响外还要受标志位Z... [阅读全文]

汇编转移指令

转移指令是汇编语言员经常使用组指令在高级语言中时常有“尽量不要使用转移语句”劝告但如果在汇编语言中也尽量不用转移语句那么该要么无法编写要么没有多少功能所以在汇编语言中不但要使用转移指令而且还要灵活运用指令系统中有大量转移指令 转移指令分无条件转移指令和有条件转移指令两大类 1、无条件转移指令(Transfer Unconditionally) 无条件转移指令包括... [阅读全文]

条件转移指令:汇编条件转移指令(Transfer Conditionally)

条件转移指令是组极其重要转移指令它根据标志寄存器中个(或多个)标志位来决定是否需要转移这就为实现多功能提供了必要手段微机指令系统提供了丰富条件转移指令来满足各种区别转移需要在编时要对它们灵活运用 条件转移指令又分 3大类:基于无符号数条件转移指令、基于有符号数条件转移指令和基于特殊算术标志位条件转移指令 、无符号数条件转移指令(Jumps Based on Un... [阅读全文]

条件转移指令:条件设置字节指令

条件设置字节指令(Set Byte Conditionally)是80386及其以后CPU所具有组指令它们在测试条件方面和条件转移是致但在功能方面它们不是转移而是根据测试条件值来设置其字节操作数内容为1或0 条件设置字节指令般格式如下: SETnn Reg/Mem    ;80386+ 其中:nn是表示测试条件(见表5.4)操作数只能是8位寄存器或个字节单元 这... [阅读全文]
<< < 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 > 共797条 分27页