




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、总总 复复 习习1封面总总 复复 习习2第一章 1.2数据表示 第一章第一章 汇编语言基础知识汇编语言基础知识1.2 1.2 数据表示数据表示 1.1.十进制数转换二进制数;十进制数转换二进制数; 整数部分整数部分不断除以不断除以2 2,记下每次得到的余,记下每次得到的余数,直到商为零;数,直到商为零;余数倒排,即最后得到的余数倒排,即最后得到的余数排在最高位,第一个余数排在最低位。例余数排在最高位,第一个余数排在最低位。例如将十进制数如将十进制数1313转换成二进制转换成二进制数:数: 小数部分小数部分转换:乘转换:乘2 2取整,顺序排列得到取整,顺序排列得到的整数。例如将的整数。例如将0.
2、81250.8125转换成二进制数转换成二进制数总总 复复 习习3数制转换 bcd 码2.2.二进制数十六进制数互相转换二进制数十六进制数互相转换1101001.101b=1101001.101b=68.ah68.ah (68.5h68.5h)3.bcd 3.bcd 码(码(84218421码、二码、二十进制数)十进制数)v 解决十进制数在计算机内部如何表示。解决十进制数在计算机内部如何表示。bcdbcd码码 规定用四位二进制数表示一位十进制数。规定用四位二进制数表示一位十进制数。v 对多位十进制数,只要把每一位十进制数分对多位十进制数,只要把每一位十进制数分别表示为四位二进制数即可。别表示为
3、四位二进制数即可。v 压缩压缩bcdbcd码和非压缩码和非压缩bcdbcd码码总总 复复 习习4ascii码4.ascii4.ascii码码v解决字母、符号在计算机内部如何表示。解决字母、符号在计算机内部如何表示。v基本基本asciiascii码(标准码(标准asciiascii码)用七位二进制数表示码)用七位二进制数表示一个符号(共一个符号(共128128个);个);v书写:用两位十六进制数书写,如书写:用两位十六进制数书写,如41h-a41h-a;v种类:种类:1 1)控制字符(前)控制字符(前3232个和最后一个):个和最后一个): 0d- 0d- 回车,回车,0a- 0a- 换行;换行
4、; 2 2)其他为打印字符(可显示字符);)其他为打印字符(可显示字符);v应记住的应记住的asciiascii码:码:30h39h30h39h,41h41h,61h 61h v扩展扩展asciiascii码用八位二进制数表示一个符号(共码用八位二进制数表示一个符号(共256256个)。个)。总总 复复 习习5有符号数表示方法5.5.有符号数表示方法有符号数表示方法原码、反码、补码总结:原码、反码、补码总结: 1 1)正数正数的原码反码补码相同;的原码反码补码相同;负数负数的原码反码的原码反码补码各不相同,补码各不相同,但符号位都是但符号位都是1 1。 2 2)设字长为八位,原码反码的表数范围
5、为)设字长为八位,原码反码的表数范围为-127-127+127+127,补码的表数范围为,补码的表数范围为-128-128+127+127。 3 3)已知某负数的补码,求该负数的真值,方法如下:)已知某负数的补码,求该负数的真值,方法如下:符号位不动,其余位求反加一,得到的是该符号位不动,其余位求反加一,得到的是该负数的原码;负数的原码;根据原码即可写出该负数的真值。根据原码即可写出该负数的真值。 例:例:x补补=11111100b x原原=10000011b+1=10000100b x= -0000100= - 4 总总 复复 习习61.5 8086微处理器1.5 80861.5 8086微
6、处理器微处理器 1.80861.8086的功能结构的功能结构总线接口单元、执行单元、指令预取队列总线接口单元、执行单元、指令预取队列 2.80862.8086的寄存器组的寄存器组v80868086通用寄存器通用寄存器 ( (1)1)axax- -累加器。累加器。 (2)(2)bxbx- -基地址寄存器。基地址寄存器。 (3)(3)cxcx- -计数寄存器。计数寄存器。 (4)(4)dxdx- -数据寄存器。数据寄存器。 (5)(5)sisi- -源变址寄存器。源变址寄存器。 (6)(6)didi- -目的变址寄存器。目的变址寄存器。 (7)(7)bpbp- -栈基地址寄存器。栈基地址寄存器。(
7、8)(8)spsp- -栈顶指针。栈顶指针。v专用寄存器专用寄存器 ipip、标志寄存器标志寄存器flagflag(pswpsw)总总 复复 习习7段寄存器使用规定3.3.段寄存器使用规定段寄存器使用规定s ss se se sd sd sd sd ss ss sc sc s 默默 认认 段段 寄寄 存存 器器有效地址有效地址eaead id is is i有效地址有效地址eaeas ps pi pi p偏偏 移移 地地 址址cs,es,sscs,es,ss无无cs,es,sscs,es,sscs,es,sscs,es,ss无无无无可超越的可超越的段段 寄寄 存存 器器bpbp作基址时作基址时
8、串的目的操作数串的目的操作数串的源操作数串的源操作数一般数据访问一般数据访问堆栈操作堆栈操作取指令取指令访访 问问 存存 储储 方方 式式总总 复复 习习81.6 8086的寻址方式1.6 80861.6 8086的寻址方式的寻址方式 1.1.立即数寻址方式立即数寻址方式 2.2.寄存器寻址方式寄存器寻址方式 3.3.存储器寻址方式存储器寻址方式寄存器间接寻址寄存器间接寻址寄存器相对寻址寄存器相对寻址基址变址寻址基址变址寻址直接寻址直接寻址基址变址相对寻址基址变址相对寻址总总 复复 习习9mem操作数的各种形式 memmem操作数的各种形式操作数的各种形式 2050h;var_addr2050
9、h;var_addr bx;bp;si;dibx;bp;si;di bx+disp;bp+disp;si+disp;di+dispbx+disp;bp+disp;si+disp;di+disp dispbx; dispbp; dispsi; dispdi dispbx; dispbp; dispsi; dispdi bx+si;bx+di;bp+si;bp+di bx+si;bx+di;bp+si;bp+di bxsi;bxdi; bxsi;bxdi; bx+si+disp;bx+di+disp;bx+si+disp;bx+di+disp; bp+si+disp;bp+di+disp; bp+
10、si+disp;bp+di+disp;总总 复复 习习10第二章 2.1 mov 第二章第二章 80868086的指令系统的指令系统2.1 2.1 数据传送指令数据传送指令 2.1.1 2.1.1 通用数据传送指令通用数据传送指令 mov/xchg/xlatmov/xchg/xlatv mov destmov dest,srcsrc 立即数只能作源操作数立即数只能作源操作数, ,且要与目的操作数匹配。且要与目的操作数匹配。 两个操作数类型要匹配。两个操作数类型要匹配。 如汇编程序无法确定操作类型,要加类型说明符。如汇编程序无法确定操作类型,要加类型说明符。 cscs一般不能作目的操作数(用转移
11、指令改变)。一般不能作目的操作数(用转移指令改变)。 如果指令有两个操作数,不允许两个都是存储器数。如果指令有两个操作数,不允许两个都是存储器数。 所有所有“mov”mov”类指令均不影响标志。类指令均不影响标志。 总总 复复 习习11push/pop2.1.2 2.1.2 堆栈操作指令堆栈操作指令 push r16/m16/segpush r16/m16/seg pop r16/m16/seg pop r16/m16/seg 堆栈操作是字操作指令堆栈操作是字操作指令 在在“pop”pop”指令中,指令中,“pop cs”pop cs”为非法指为非法指令。令。 堆栈操作指令不影响标志。堆栈操作
12、指令不影响标志。 总总 复复 习习12地址传送指令2.1.3 2.1.3 标志传送指令标志传送指令 lahf/sahf/pushf/popflahf/sahf/pushf/popf2.1.4 2.1.4 地址传送指令地址传送指令 lea/lds/leslea/lds/les lea r16 lea r16,memmem 2.1.5 2.1.5 输入输出指令输入输出指令 in/outin/out总总 复复 习习132.2 算术运算指令2.2 2.2 算术运算指令算术运算指令 add/adc/incadd/adc/inc sub/sbb/dec/ sub/sbb/dec/neg/cmpneg/cm
13、p加法指令对标志的影响:加法指令对标志的影响:addadd和和adcadc指令对所有指令对所有的的6 6个个状态标志都有影响,状态标志都有影响,incinc指令不影响指令不影响cfcf,影响其他五个标志。影响其他五个标志。学习加减法指令要会设置学习加减法指令要会设置标志、使用标志。标志、使用标志。加减法运算加减法运算要注意要注意ofof和和cfcf的意义不同,用法不的意义不同,用法不同同。注意注意neg/cmpneg/cmp指令的用法。指令的用法。 总总 复复 习习14mul/imulmul/imulmul/imul 指令指定的是乘数,指令指定的是乘数,被乘数是隐含的被乘数是隐含的。如乘数类如
14、乘数类型为字节,则被乘数为型为字节,则被乘数为alal,1616位乘积用位乘积用axax;如乘数类如乘数类型为字,则被乘数为型为字,则被乘数为axax,3232位乘积用位乘积用dxdx,axax。 影响影响 cf cf 、of of 标志:如果乘积的高一半为零,或标志:如果乘积的高一半为零,或高一半为低一半的符号扩展,高一半为低一半的符号扩展,则则 cf=of=0cf=of=0,否则,否则,cf=of=1cf=of=1。对其他标志。对其他标志无定义无定义。 单操作数指令,涉及单操作数指令,涉及memmem时,须指定类型。时,须指定类型。 mul bytr ptrbx+simul word pt
15、rbx+si 总总 复复 习习15div/idivdiv / idiv 指令指定的是除数,被除数是隐含的;指令指定的是除数,被除数是隐含的;除数为字节,除数为字节,则称为则称为“字节除字节除”,被除数使用,被除数使用axax;除数为字,称为除数为字,称为“字除字除”,被除数使用,被除数使用dx axdx ax。 操作数的格式与乘法指令相同。操作数的格式与乘法指令相同。 指令对状态标志无定义。指令对状态标志无定义。 当产生除法溢出,当产生除法溢出,cpu自动产生自动产生“0号号”中断,运行中断,运行相相应中断服务程序。应中断服务程序。程序设计时,应避免产生除法溢出。程序设计时,应避免产生除法溢出
16、。 总总 复复 习习16cbw/cwd cbw/cwdcbw/cwd 注意符号扩展涉及的对象是注意符号扩展涉及的对象是al和和ah以及以及ax和和dx,与其他寄存器无关。与其他寄存器无关。 用来为有符号数除法准备被除数(用来为有符号数除法准备被除数(16位被除数和位被除数和32位被除数)。位被除数)。 为无符号数除法准备被除数,用为无符号数除法准备被除数,用“0扩展扩展”。 daa/dasdaa/das/aaa/aas/aam/aad/aaa/aas/aam/aadv如果做如果做bcd码加法运算,码加法运算,add、adc指令后应紧指令后应紧跟跟daa指令,以保证结果正确。指令,以保证结果正确
17、。v调整对象只能是调整对象只能是al寄存器(寄存器(bcd码运算只能使用码运算只能使用以以al寄存器为目的操作数的寄存器为目的操作数的8位数运算指令)。位数运算指令)。v对对of标志无定义,设置其他标志标志无定义,设置其他标志总总 复复 习习172.3 位操作指令2.3 2.3 位操作指令位操作指令 and/or/xor/and/or/xor/testtest/not/not操作数格式同加减法指令。操作数格式同加减法指令。设置设置cf=of=0,影响影响sf、zf、pf,对,对af无定义。无定义。 testtest不影响目的操作数,只根据运算结果设置标志。不影响目的操作数,只根据运算结果设置标
18、志。 not reg/mem 不影响任何标志。不影响任何标志。总总 复复 习习18and/or/xor/test/not屏蔽若干位。屏蔽若干位。 (常用指令)(常用指令) and al,01h;屏蔽;屏蔽al的的d7d1,保留,保留d0 and al,0fh;屏蔽;屏蔽al高高4位,保留低位,保留低4位位使若干位置使若干位置1 (常用指令)(常用指令) or bl,0f0h;使;使bl高高4位置位置1,低,低4位不变位不变清除清除cf、of 或或 设置标志设置标志 and al,al (and al,0ffh;or bl,bl;) ;类似指令没有改变目的操作数,但使类似指令没有改变目的操作数,
19、但使cf=of=0,也,也 可能纯粹以设置其他标志(可能纯粹以设置其他标志(zf)为目的。)为目的。 总总 复复 习习19用法/2 求反求反 not al / / not word ptr bx+di 对指定位求反对指定位求反 xor al,0fh;al高高4位不变,低位不变,低4位求反位求反 xor cl,55h;cl偶数位求反,奇数位不变偶数位求反,奇数位不变 清除寄存器及清除寄存器及cf(常用指令)(常用指令) xor ax,ax / xor bx,bx xor byte ptr bx ,byte ptr bx 总总 复复 习习20用法/3不改变操作数,测试操作数或操作数的指定位不改变操
20、作数,测试操作数或操作数的指定位test al,0ffh;由;由zf标志判断标志判断al是否为零是否为零 ;也可以用;也可以用cmp指令。指令。test al,01;由;由zf标志判断标志判断al的的d0是否为零,是否为零, ;zf=1,则,则al.d0=0 ;zf=0,则,则al.d0=1and al,01 ;也可完成上述功能,但是改变了;也可完成上述功能,但是改变了 目的操作数目的操作数总总 复复 习习21移位指令shl/salshl/sal/ /shrshr/sar/sar标志设置标志设置 af:对:对af无定义;无定义;cf:按移入的值或为:按移入的值或为0或为或为1; 根据移位后的结
21、果设置根据移位后的结果设置sf、zf、pf; of:当移动一位时,移位后如果符号位发生变化,则:当移动一位时,移位后如果符号位发生变化,则of=1,符号位符号位不发生变化,则不发生变化,则of=0,移位次数大于一时,移位次数大于一时,of不定。不定。操作数左移一位,相当于乘操作数左移一位,相当于乘2(对有符号数同理,只要(对有符号数同理,只要of=0,结果就对)。,结果就对)。操作数操作数逻辑右移(逻辑右移(shr)一位,相当于一位,相当于无符号数无符号数除以除以2;操作数操作数算术右移(算术右移(sar)一位,相当于一位,相当于有符号数有符号数除以除以2。rol/ror/rcl/rcrrol
22、/ror/rcl/rcr 移位指令和循环移位指令结合,可实现移位指令和循环移位指令结合,可实现32位数左移位数左移右移右移。总总 复复 习习222.4 控制转移类指令2.4 2.4 控制转移类指令控制转移类指令 2.4.1 2.4.1 无条件转移指令无条件转移指令vjmp short label;jmp near ptr label; vjmp r16 ;jmp word ptr memvjmp ( (far ptr) ) labelvjmp far ptr mem (jmp dword ptr mem) 总总 复复 习习23条件转移指令/12.4.2 2.4.2 条件转移指令条件转移指令1.
23、1.判断单个状态标志判断单个状态标志 助记符助记符 标标 志志 说说 明明 jz/jejz/je zf=1 zf=1 结果为结果为0 0;两数相等;两数相等 jnz/jnejnz/jne zf=0 zf=0 不为不为0 0;不相等;不相等 jc/jbjc/jb/jnae cf=1 /jnae cf=1 加有进位;减有借位;其他加有进位;减有借位;其他 jnc/jnbjnc/jnb/jae cf=0 /jae cf=0 无进位;无进位; 无借位;其他无借位;其他 js sf=1 js sf=1 结果为负结果为负 jns sf=0 jns sf=0 结果为正结果为正 jp/jpe pf=1 jp/
24、jpe pf=1 结果的低结果的低8 8位含偶数个位含偶数个“1”1” jnp/jpo pf=0 jnp/jpo pf=0 结果的低结果的低8 8位含奇数个位含奇数个“1”1” jo of=1 jo of=1 运算结果溢出运算结果溢出 jno of=0 jno of=0 运算结果不溢出运算结果不溢出jcxz jcxz ( cx=0cx=0) 串操作是否处理完所有串操作是否处理完所有 总总 复复 习习24条件转移指令/22.2.比较无符号数高低比较无符号数高低( (条件为一个标志或标志组合条件为一个标志或标志组合) ) 助记符助记符 标志标志 说说 明明 j jb b/jn/jna ae/jc
25、cf=1 e/jc cf=1 低于低于/ /不高于不等于不高于不等于( () ) jn jnb b/j/ja ae/jnc cf=0 e/jnc cf=0 不低于不低于/ /高于或等于高于或等于()() j jb be/jne/jna a cf=1 cf=1或或zf=1 zf=1 低于或等于低于或等于/ /不高于不高于()() jn jnb be/je/ja a cf=0 cf=0且且zf=0 zf=0 不低于不等于不低于不等于/ /高于高于( () )3.3.比较有符号数大小比较有符号数大小( (条件为标志组合条件为标志组合) ) 助记符助记符 标志标志 说说 明明 j jl l/jn/jn
26、g ge sfof e sfof 小于小于/ /不大于且不等于不大于且不等于( () ) jn jnl l/j/jg ge sfe sfof of 不小于不小于/ /大于或等于大于或等于 ()() j jl le/jne/jng g sfof sfof或或zf=1 zf=1 小于或等于小于或等于/ /不大于不大于 ()() jn jnl le/je/jg g sf sfofof且且zf=0 zf=0 不小于且不等于不小于且不等于/ /大于大于( () )总总 复复 习习25循环控制指令2.4.3 2.4.3 循环控制指令循环控制指令loop labelloop label ;cx0cx0,循环
27、;否则退出,循环;否则退出loopz/loopf labelloopz/loopf label;cx0 cx0 且且 zf=1zf=1,循环,循环 ;否则退出;否则退出loopnz/loopne labelloopnz/loopne label;cx0 cx0 且且 zf=0zf=0,循环,循环 ;否则退出;否则退出2.4.4 2.4.4 子程序调用及返回指令子程序调用及返回指令call near ptr label ;段内直接调用;段内直接调用call r16/word ptr m16 ;段内间接调用;段内间接调用call far ptr label ;段间直接调用;段间直接调用call d
28、word ptr mem ;段间间接调用;段间间接调用retret ret i16ret i16 总总 复复 习习26中断控制指令/12.4.5 2.4.5 中断控制指令中断控制指令1.80861.8086中断类型中断类型 外部中断外部中断 中断源来自中断源来自cpucpu之外(两种)之外(两种)v可屏蔽中断:响应与否,可屏蔽中断:响应与否,受受ifif标志控制。标志控制。 涉及指令:涉及指令:cli sticli stiv非屏蔽中断:非屏蔽中断:不受不受ifif控制的中断源。(控制的中断源。(2#2#)总总 复复 习习27中断控制指令/2 内部中断(内部中断(4 4种)种) 中断源为:程序执
29、行过程中程序自身引发的事件中断源为:程序执行过程中程序自身引发的事件v除法错中断:除数为除法错中断:除数为0 0或除法溢出。(或除法溢出。(0#0#)v单步中断:若单步标志单步中断:若单步标志tf=1tf=1,则每条指令执行,则每条指令执行 行后产生单步中断。(行后产生单步中断。(1#1#)v溢出中断:执行中断指令溢出中断:执行中断指令intointo时,如时,如of=1of=1,则,则 产生溢出中断。(产生溢出中断。(4#4#)v指令中断:执行中断调用指令指令中断:执行中断调用指令int n int n ,产生指,产生指 令中段,类型号令中段,类型号n=0n=0255255。总总 复复 习习
30、28中断控制指令/32.80862.8086的中断过程的中断过程中断向量表中断向量表进入中断服务程序进入中断服务程序返回断点返回断点cpucpu取类型号取类型号; ;外中断外中断: :中断源提供中断源提供 内中断内中断: :指令提供、预定义指令提供、预定义类型号类型号* *4 4:对应向量在表中的首地址:对应向量在表中的首地址 保护断点:保护断点:pswpsw、cscs、ipip依次入栈依次入栈从向量表读取服务程序入口地址:从向量表读取服务程序入口地址: ipip低位字低位字 cscs高位字高位字进入中断服务程序进入中断服务程序3.80863.8086的中断指令的中断指令 int i8 /in
31、to /iret / cli / stiint i8 /into /iret / cli / sti总总 复复 习习29系统功能调用2.4.6 2.4.6 系统功能调用系统功能调用v在在ahah中设置调用的功能号;中设置调用的功能号;v在指定的寄存器中设置入口参数;在指定的寄存器中设置入口参数;v执行执行int 21hint 21h指令,调用功能子程序;指令,调用功能子程序; 1.1.单个字符的输出单个字符的输出 ah=02ah=02; 入口参数:入口参数:dl=dl=字符的字符的asciiascii码码 2.2.字符串输出字符串输出 ah=09ah=09; 入口参数:入口参数:ds:dx=d
32、s:dx=字符串首地址字符串首地址 字符串必须以(字符串必须以(24h24h)结尾)结尾 3.3.单个字符输入单个字符输入 ah=1ah=1;入口参数:无;出口参数:入口参数:无;出口参数:al=al=字符字符asciiascii码码 总总 复复 习习302.5 串操作指令2.5 2.5 串操作指令串操作指令 1. 1. 串传送指令串传送指令 movsb/movswmovsb/movsw 2. 2. 串存储指令串存储指令 stosb/stoswstosb/stosw 3. 3. 串读取指令串读取指令 lodsb/lodswlodsb/lodsw 4. 4. 串比较指令串比较指令 cmpsb/c
33、mpswcmpsb/cmpsw 5. 5. 串扫描指令串扫描指令 scasb/scaswscasb/scasw 6. 6. 重复前缀指令重复前缀指令 rep repz/repe rep repz/repe 和和repnz/repnerepnz/repne 1 1)源数据串可以段跨越,目的串不可。)源数据串可以段跨越,目的串不可。 2 2)df=0df=0,地址指针,地址指针+1+1或或+2+2,df=1df=1,指针,指针-1-1或或-2-2。 3 3)注意重复前缀的使用。)注意重复前缀的使用。总总 复复 习习312.6 处理机控制类指令2.6 2.6 处理机控制类指令处理机控制类指令 1 1
34、)nop(nop(同同xchg ax,ax)xchg ax,ax)预留空间预留空间 删除指令删除指令 软件延时软件延时 2 2) 段超越前缀指令段超越前缀指令 段寄存器:如段寄存器:如 cscs:,:,ssss: 3 3)指令封锁前缀指令)指令封锁前缀指令locklock(有相应引脚(有相应引脚 locklock):): lock mullock mul 4 4)暂停指令)暂停指令 hlthlt 反复执行反复执行nopnop,等待复位或中断信号。(慎用),等待复位或中断信号。(慎用) 5 5)交权指令)交权指令esc esc 将浮点指令交给浮点处理器。将浮点指令交给浮点处理器。 6 6)等待指
35、令)等待指令waitwait(有相应引脚信号(有相应引脚信号 testtest) 用于与用于与80878087同步同步 (5t5t) test=1 test=1 保持保持waitwait状态,状态,test=0 test=0 退出退出waitwait状态。状态。总总 复复 习习32第三章3.1/3.2第三章第三章 3.1/3.23.1/3.21. 1. 变量定义伪指令变量定义伪指令 1 1)字节定义伪指令)字节定义伪指令dbdb 2 2)定义字单元伪指令)定义字单元伪指令dwdw 3 3)定义双字单元伪指令)定义双字单元伪指令dddd 4 4)其他数据定义伪指令)其他数据定义伪指令 1 1)d
36、fdf、dqdq、dt dt 略略 2 2)masm6.0masm6.0建议使用:建议使用:byte/word/dwordbyte/word/dword等等 3 3)sbyte/sword/sdwordsbyte/sword/sdword:有符号数专用。:有符号数专用。 5 5)dup / dup / ?/ / 总总 复复 习习332.基数控制伪指令2.2.基数控制伪指令(基数控制伪指令(radixradix) radix n;n取取216内的任意整数。内的任意整数。3.3.符号常数定义伪指令(符号常数定义伪指令(equequ、= =)vequequ符号名符号名 equ equ 数值表达式数值
37、表达式符号名符号名 equ equ ;5.x5.x版用双引号。版用双引号。v“=” =” 号伪指令号伪指令总总 复复 习习34例题 . .model small model small .stack .stack .data .data bvar db 16 bvar db 16 wvar dw 4wvar dw 4* *3 3 dvar dd 4294967295 dvar dd 4294967295 db 1,2,3,4,5 db 1,2,3,4,5 abc db a,b,c abc db a,b,c msq db hello,13,10,$ msq db hello,13,10,$ bb
38、uf db 12 dup(month)bbuf db 12 dup(month)dbuf dd 25 dup(?dbuf dd 25 dup(?) )b1b1dw bvardw bvar;b1=0000hb1=0000hb2b2dw wvardw wvar;b2=0001hb2=0001hb3b3dd wvardd wvar;b3=0001hb3=0001h,b3+2=b3+2=段地址段地址总总 复复 习习354.定位伪指令org4.4.定位伪指令定位伪指令orgorg(/even/align/even/align) 控制数据或指令的偏移地址。控制数据或指令的偏移地址。1 1)org org
39、参数参数 使地址计数器指向参数表达的偏移地址。使地址计数器指向参数表达的偏移地址。org 100horg 100h;从;从0100h0100h单元开始分配存储器。单元开始分配存储器。orgorg $+10$+10;$ $表示地址计数器的当前值,表示地址计数器的当前值,$+10$+10;表示由当前地址向前跳过;表示由当前地址向前跳过1010个字节。个字节。2 2)eveneven ;使它后面的数据或指令从偶地址开始。使它后面的数据或指令从偶地址开始。 3 3)align nalign n;使它后面的数据或指令从使它后面的数据或指令从n n的整数倍的整数倍 ;地址开始(可被;地址开始(可被n n整
40、除)。整除)。 n n是是2 2的乘方(的乘方(2 2,4 4,88)且小于所在段的定位属)且小于所在段的定位属性值。如性值。如“align 4”align 4”,使下一个地址开始于双字边界,使下一个地址开始于双字边界总总 复复 习习36例题定位伪指令举例:定位伪指令举例:data segmentdata segmentd01 db 1,2,3d01 db 1,2,3 ;d01d01偏移地址为偏移地址为0 0,=0003h=0003heveneven(align 2align 2); $ $为为0004h0004hd02 dw 5d02 dw 5 ;d02d02偏移地址为偏移地址为04h04h
41、, =0006h=0006halign 4align 4 ;最接近;最接近6 6的、可被的、可被4 4整除的数是整除的数是8 8 ; =0008h=0008hd03 dd 6d03 dd 6 ;d03d03的偏移地址为的偏移地址为08h08h,=000ch=000chorg org +10h+10h ;000ch+0010h=001ch000ch+0010h=001ch =001ch=001chd04 db abcd04 db abc ;d04d04的偏移地址为的偏移地址为001ch001ch =001fh=001fhlen equ len equ d04d04;len=001flen=001
42、f001c=3001c=3 ;变量;变量d04d04所占的字节数。所占的字节数。总总 复复 习习373.3程序段的定义和属性3.33.3程序段的定义和属性程序段的定义和属性1.1.简化段定义标准格式:简化段定义标准格式:.model small.model small.stack.stack.data.data.code.code.startup.startup .exit 0.exit 0endend总总 复复 习习382. 完整段定义格式2. 2. 完整段定义格式完整段定义格式1 1). .段定义伪指令段定义伪指令段名段名 segment segment 定位定位 组合组合 段字段字 类别
43、类别 段名段名 endsends定位属性:指定逻辑段的起始地址定位属性:指定逻辑段的起始地址bytebyte:为下一个可用的字节地址:为下一个可用的字节地址(xxxx xxxxb)(xxxx xxxxb)wordword:为下一个可用的偶数地址:为下一个可用的偶数地址(xxxx xxx0b)(xxxx xxx0b)dworddword:下一个可被:下一个可被4 4整除的地址整除的地址(xxxx xx00b)(xxxx xx00b)parapara:下一个可被:下一个可被1616整除的地址整除的地址(xxxx 0000b)(xxxx 0000b)pagepage:下一个可被:下一个可被25625
44、6整除的地址整除的地址(0000 0000b) (0000 0000b) 总总 复复 习习39指定段寄存器伪指令2 2)指定段寄存器伪指令)指定段寄存器伪指令assume assume 段寄存器段寄存器: :段名段名 ,段寄存器,段寄存器: :段名段名 建立段寄存器与段之间的缺省关系,改变这种缺省建立段寄存器与段之间的缺省关系,改变这种缺省关系可使用段跨越前缀。关系可使用段跨越前缀。 如如 assume csassume cs:codecode,dsds:datadataassume assume 段寄存器:段寄存器:nothingnothing 对指令给出的段寄存器取消已经指定的缺省关系。对
45、指令给出的段寄存器取消已经指定的缺省关系。 注意:注意:assumeassume伪指令并不能为段寄存器赋值。伪指令并不能为段寄存器赋值。总总 复复 习习40段组伪指令3 3)段组伪指令)段组伪指令组名组名 group group 段名段名 ,段名,段名将多个同类但不同名的段合并为一个不超过将多个同类但不同名的段合并为一个不超过64kb64kb的物理段,并使用组名统一访问它。可理的物理段,并使用组名统一访问它。可理解为组合属性解为组合属性publicpublic的补充。的补充。.model small.model small具有下面语句的作用:具有下面语句的作用:dgroup group _da
46、tadgroup group _data,_bss_bss,stackstack4 4)汇编结束伪指令)汇编结束伪指令 end end 标号标号 总总 复复 习习41表达式/运算符/操作符第三章第三章 表达式表达式/ /运算符运算符/ /操作符操作符 1.1.数值表达式及运算符数值表达式及运算符 常数、寄存器、变量及标号等用运算符连接起来即常数、寄存器、变量及标号等用运算符连接起来即构成表达式,如细分,有算术表达式、逻辑表达式、关构成表达式,如细分,有算术表达式、逻辑表达式、关系表达式、地址表达式等,但是由于前三种表达式或由系表达式、地址表达式等,但是由于前三种表达式或由它们构成的综合型表达式
47、其结果都是数值,故一律算做它们构成的综合型表达式其结果都是数值,故一律算做数值表达式数值表达式;如果一个表达式的结果从物理意义来说,;如果一个表达式的结果从物理意义来说,代表存储器单元的地址,则称其为代表存储器单元的地址,则称其为地址表达式地址表达式。常见运算符分成五类:常见运算符分成五类: 1 1)算术运算符:)算术运算符:+ + 、- - 、* * 、/ / 、modmod 2 2)逻辑运算符:)逻辑运算符:and and 、or or 、xor xor 、notnot 3 3)移位运算符:)移位运算符:shl shl 、shrshr 4 4)关系运算符:)关系运算符:eqeq、nene、
48、gtgt、ltlt、gege、lele 5 5)高低分离符:)高低分离符:highhigh、lowlow、highwordhighword、lowwordlowword总总 复复 习习42地址操作符2.2.地址操作符及地址表达式地址操作符及地址表达式voffset offset 变量变量| |标号标号;返回变量或标号的偏移;返回变量或标号的偏移地址地址vseg seg 变量变量| |标号标号;返回变量或标号的段地;返回变量或标号的段地址址3.3.类型操作符(类型操作符(数值数值表达式)表达式) 对变量或标号的类型属性进行操作。对变量或标号的类型属性进行操作。 ptrptr/this/label
49、/this/label/shortshort/ /typetype/ /sizeof/lengthofsizeof/lengthof总总 复复 习习43例题/1例例 3.4 3.4 属性及应用属性及应用 .model small.model small .stack .stack .data .datav_byte equ this bytev_byte equ this bytev_word dw 3332h,3735hv_word dw 3332h,3735htarget dw 5 dup(20h)target dw 5 dup(20h)crlf db 0dh,0ah, $crlf db
50、0dh,0ah, $flag db 0flag db 0n_point dw offset s_labeln_point dw offset s_label .code .code .startup .startup mov al, mov al,byte ptrbyte ptr v_word v_word dec al dec al mov mov v_byte ,al v_byte ,al;v_word=3331h;v_word=3331h总总 复复 习习44例题/2n_label:cmp flag,1 ;n_label:cmp flag,1 ;flagflag单元单元=0=0 jz s_
51、label jz s_label inc flag inc flag ;flag=1flag=1 jmp short n_labeljmp short n_labels_label: cmp flag,2 ;s_label: cmp flag,2 ;flag=1flag=1 jz next jz next inc flag ; inc flag ;flag=2flag=2 jmp n_pointjmp n_point ; ;段内间接转移段内间接转移,等同于等同于jmp s_labeljmp s_labelnext: mov ax,next: mov ax,type v_wordtype v_w
52、ord ;ax=0002h;ax=0002h mov cx, mov cx,lengthoflengthof target; target;5 5个数据项,个数据项,cx=5cx=5 mov si, mov si,offsetoffset target targetw_again: mov si,axw_again: mov si,ax inc si inc si inc si inc si loop w_again; loop w_again;对对targettarget填充填充5 5个字:个字:0002h0002h总总 复复 习习45例题例题/3mov cx,mov cx,sizeofsi
53、zeof target; target;cx=10cx=10 mov al,? mov al,? mov di,offset target mov di,offset targetb_again: mov di,alb_again: mov di,al inc di inc di loop b_again ; loop b_again ;对对targettarget填充填充1010个个? mov dx,offset v_wordmov dx,offset v_word mov ah,9 mov ah,9 int 21h int 21h ; ;显示结果为显示结果为1357?1357? .exit
54、 0 .exit 0 end end总总 复复 习习46第四章基本汇编语言程序设计 第四章第四章 基本汇编语言程序设计基本汇编语言程序设计1.1.按程序结构分类:按程序结构分类: 4.1 4.1 顺序程序设计顺序程序设计 4.2 4.2 分支程序设计分支程序设计 4.3 4.3 循环程序设计循环程序设计 4.4 4.4 子程序设计子程序设计2.2.按程序功能分类按程序功能分类总总 复复 习习474.2 分支程序设计4.1 4.1 顺序程序设计顺序程序设计4.2 4.2 分支程序设计分支程序设计1. 1. 单分支类型单分支类型条件满足?条件满足?分支体分支体yn后续操作后续操作对同一个问题,根据
55、选择的条件不同,单分支对同一个问题,根据选择的条件不同,单分支结构的流程图有两种画法,对应的程序也有两结构的流程图有两种画法,对应的程序也有两种编法。种编法。总总 复复 习习482.双分支程序2.2.双分支程序双分支程序条件成立?条件成立?分支语句体分支语句体2yn分支语句体分支语句体1 后后 续续 操操 作作 有些双分支问题可有些双分支问题可以先假设一种情况,以先假设一种情况,把双分支改成单分把双分支改成单分支问题。支问题。总总 复复 习习493.多分支程序 x0x0?ynx=0x=0?yny=-1y=1y=0d0=d0=1 1分支分支l0d2=d2=1 1d1=d1=1 1分支分支l1分支
56、分支l2yyynnn3.多分支程序多分支程序总总 复复 习习504.3 循环程序设计4.3 4.3 循环程序设计循环程序设计1.1.两种循环结构两种循环结构1 1) “ “先循环、后判断先循环、后判断”结构结构相当于高级语言的相当于高级语言的“直到型直到型”循环循环2 2) “ “先判断、后循环先判断、后循环”结构结构相当于高级语言的相当于高级语言的“当型循环当型循环”,可实现,可实现0 0次次循环。循环。总总 复复 习习512.循环程序设计2.2.循环程序设计循环程序设计编写循环程序的关键在于循环的控制。编写循环程序的关键在于循环的控制。v循环次数已知:可用循环次数已知:可用looploop
57、指令,指令,cxcx计数。计数。v循环次数和循环次数和zfzf标志:可用标志:可用loopzloopz、loopnzloopnz指令。指令。v循环次数未知:通常要采用比较指令和循环次数未知:通常要采用比较指令和各类条件转移指令实现循环控制。各类条件转移指令实现循环控制。总总 复复 习习523.多重循环3.3.多重循环:循环程序的嵌套构成多重(多层)多重循环:循环程序的嵌套构成多重(多层)循环。最常见的多重循环为两重循环。循环。最常见的多重循环为两重循环。外循环初始化外循环初始化内循环初始化内循环初始化内层循环体内层循环体外层循环体外层循环体内循环结束内循环结束外循环结束外循环结束nnyy总总
58、复复 习习534.4 子程序设计4.4 4.4 子程序设计子程序设计 把功能相对独立的程序段单独编写和调试,作为把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序。一个相对独立的模块供程序使用,就形成子程序。 使用子程序:简化源程序结构;提高编程效率。使用子程序:简化源程序结构;提高编程效率。 4.4.1 4.4.1 过程定义伪指令过程定义伪指令 4.4.2 4.4.2 子程序的参数传递子程序的参数传递 4.4.3 4.4.3 子程序的嵌套递归重入子程序的嵌套递归重入 4.4.4 4.4.4 子程序的应用子程序的应用总总 复复 习习541 过程定义伪指令1 1
59、 过程定义伪指令过程定义伪指令 过程名过程名 proc near|farproc near|far 过程体过程体 retret(ret nret n) 过程名过程名 endpendp 一个完整的子程序,特别是供其他编程人员使用的子一个完整的子程序,特别是供其他编程人员使用的子程序,必须附有一个详细说明:程序,必须附有一个详细说明:子程序名(过程名)子程序名(过程名)子程序功能介绍子程序功能介绍子程序的入口参数子程序的入口参数子程序的出口参数子程序的出口参数子程序内使用的寄存器(存储单元)子程序内使用的寄存器(存储单元)使用该子程序的范例使用该子程序的范例总总 复复 习习552.子程序的参数传递
60、2.2.子程序的参数传递子程序的参数传递 主程序和子程序之间通常需要传递参数:主程序和子程序之间通常需要传递参数:v入口参数(输入参数):主程序提供给子程序入口参数(输入参数):主程序提供给子程序v出口参数(输出参数):子程序返回给主程序出口参数(输出参数):子程序返回给主程序v参数的形式:参数的形式: 数据本身(传值)数据本身(传值) 数据的地址(传址)数据的地址(传址)v传递的方法:传递的方法: 寄存器寄存器 变量变量 堆栈堆栈总总 复复 习习56按程序功能分类2.2.按程序功能分类按程序功能分类v多精度运算、查表(查代码、特定值等)、多精度运算、查表(查代码、特定值等)、排序排序v数据范
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃省白银市单招职业适应性测试题库完整
- 黑龙江省佳木斯市三校联考2023-2024学年高二上学期1月期末考试地理试题(解析版)
- 2025至2030年中国无水磷酸氢钙数据监测研究报告
- 2025年湖南国防工业职业技术学院单招职业适应性测试题库学生专用
- 二零二五年度农村宅基地租赁服务协议(乡村振兴战略实施)
- 二零二五年度集体劳动合同在科技创新企业中的应用
- 二零二五年度蔬菜种植基地与农产品电商平台合作物流合同模板
- 二零二五年度安明骑行APP平台开发与运营合同
- 二零二五年度个人知识产权运营公对私借款合同
- 2025年度自媒体账号IP授权与衍生品开发合作协议
- 杭州市淳安县国有企业招聘笔试真题2024
- 安徽省芜湖市2024-2025学年第一学期期末考试七年级语文试卷(含答案)
- 2024政府采购评审专家考试真题库及答案
- 2024年花盆市场分析现状
- 2025山东省退役军人事务厅所属事业单位招聘人员历年高频重点提升(共500题)附带答案详解
- 2024年社区工作者考试时事政治模拟题及答案
- 物业服务行业礼仪培训
- 退市新规解读-上海证券交易所、大同证券
- 2025《国家安全教育》教学大纲
- 部编版语文小学五年级下册第一单元集体备课(教材解读)
- 陕旅版四年级下册英语全册教案及各单元知识点总结
评论
0/150
提交评论