汇编语言与接口技术(第三章).ppt_第1页
汇编语言与接口技术(第三章).ppt_第2页
汇编语言与接口技术(第三章).ppt_第3页
汇编语言与接口技术(第三章).ppt_第4页
汇编语言与接口技术(第三章).ppt_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言与接口技术 主讲教师张玉琢 学习要点正确定义各种符号 熟练使用地址表达式熟练掌握汇编语言的常用指令掌握符号指令的寻址方式汇编语言的格式 第三章汇编语言与汇编程序 第三章汇编语言与汇编程序 3 2 3 3 符号指令中的表达式 符号指令的寻址方式 常用指令 3 4 伪指令 3 1 3 5 常用系统功能调用和BIOS 如 0FFH数据FFH符号 符号 汇编中的各种符号由伪指令定义 有常量 变量和标号三类 1符号指令中的表达式 1 常量 在汇编时已有确定数值的量 ASCII码字符做数值常量时 需加单引号 1 1常量和数值表达式 1 数值常量 例 AAEQU10CC 66MOVAX AA AX 10MOVAX CC AX 66 注 汇编程序不给符号常量分配存储单元 2 符号常量 2 数值表达式 由常量与运算符组成的有意义的式子 结果为数值 在汇编中允许对常量进行三种类型的运算 1 算术运算包括 MOD 求余 2 逻辑运算包括AND OR XOR NOT 3 关系运算包括 EQ NE LT GT LE GE 代表存储器的地址变量是存储器中的数据或数据区的符号表示变量名是数据的地址或数据区的首地址地址表达式由变量 常量 寄存器 SI DI BX BP 寄存器必须位于 中 和运算符组成 1 2变量和地址表达式 如 SEGW 取变量W的段地址 如 OFFSETW 取变量W的偏移地址 1 存储器分段 变量和地址表达式有三重属性 变量的类型有 字节 byte 字 word 双字 dword 四字 qword 十字节 tbyte 一个数据分别占1 2 4 8 10个单元 格式 变量名 DB表达式 定义字节变量 变量名 DW表达式 定义字变量 变量名 DD表达式 定义双字变量 2 变量的定义 数据定义伪指令指明了变量的类型表达式确定了变量的初值 1 常量或数值表达式 存入数值 2 ASCII字符串 若串长 2 只能用DB定义 存入ASCII码值 3 重复子句 格式 NDUP 表达式 重复N次 N 1的正整数 其值由表达式确定 4 地址表达式 可用DW或DD定义 当地址表达式为变量或标号名时 若用DW则取它的偏移地址来初始化变量 若用DD则取其偏移地址和段地址来初始化其变量 5 由以上表达式组成的序列 之间用 分隔 表达式可以有以下几种形式 数据段DATA1定义的变量W1DWB3B1DB AB W2DW 5 1994HB2DB4DUP DDDEBB3DB2DUP 1 DB1DUP 10 E 重复因子1不能省DB 13 1 3在附加数据段DATA2中定义的变量如下 EBDB8DUP 0 EWDW AB CD 用DW定义变量时 字符串长度不超过2个字符 P44例画出数据的存储形式 8 0 1 标号的三个属性 1 段地址 定义该标号所在段的段首址 2 偏移地址 标号所在段的段首址到该标号定义指令的字节距离 3 类型 两种 NEAR 段内调用 FAR 段间调用 标号 指令地址的符号表示 也可以是过程名 1 3标号 1 书写在指令助记符前 用 定义 只能为NEAR类型 2 用PROC ENDP伪指令定义过程名 例 CYCLE MOVAL SI 定义近标号CYCLE近标号只能在段内使用 例 ABCPROCFAR 定义过程名ABC为远标号ABCENDP 2 标号的定义 变量 标号以及由其组成的地址表达式均有类型属性 在编程时往往需要临时改变原定义的变量或标号的类型属性 而仍保持它们原来的段地址和偏移地址属性不变格式 类型PTR地址表达式 1 4变量和标号类型的变更 例1 B1DB AB 定义变量B1为字节类型WORDPTRB1 临时改变B1的类型为字变量例2 BYTEPTR BX 5 明确地址表达式 BX 5 的类型为字节例3 ADW1122H 3344H 变量A为字类型MOVAX AMOVAL BYTEPTRA 第三章汇编语言与汇编程序 1 3 符号指令中的表达式 符号指令的寻址方式 常用指令 4 伪指令 2 5 常用系统功能调用和BIOS 汇编语言的指令格式 标号 操作码 目的操作数 源操作数 注释1 标号 表示一条指令的符号地址2 操作码规定操作的性质 表示指令所要执行的操作3 操作数表示指令执行过程中操作的对象 操作数 地址码 提供操作数的地址或操作数本身 即从何处获得操作数以及运算结果存在何处 寻址方式 分为 立即寻址 寄存器寻址 存储器寻址 4 注释用于解释程序使之便于阅读的任何说明文字 3 2符号指令中的寻址方式 因为寄存器在CPU内部 所以采用寄存器寻址可提高运行效率 特别是AX 用它存放运算结果 则执行指令的时间短些 所以最常用 2 1寄存器寻址 例 AX 2035H BX 0178HMOVBX AX BX AX 2035HADDAL BL AL ADH BL 78H AX BX CX DX SI DI BP SP 16位通用寄存器AH AL BH BL CH CL DH DL 8位通用寄存器 立即寻址方式只能用于源操作数 主要用来给寄存器或存储器赋初值 也可以与寄存器或存储器操作数进行算术逻辑运算例 MOV5 AL 2 2立即寻址 例 MOVAL 5 将字节05H送AL AL 05HMOVAX 18 将字0012H送AX AX 0012HMOVBL 1 将字节FFH送BL BL 0FFH 2 3直接寻址 注 段地址默认在DS段例 MOVAX W该指令的源操作数地址为DS OFFSETW 直接寻址常用已定义的变量表示例 W2DW 5 1994HB1DB AB MOVAX W2 AX FFFBHMOVBX W2 2 BX 1994HMOVB1 3 AL B1 3 FBH区分立即寻址与直接寻址从变量中取数据属于直接寻址方式 注意与符号常量区别例 AAEQU10MOVAX AA 立即寻址 AX 000AHMOVAX W2 直接寻址 AX FFFBH 如 MOVCX BX 如右图所示 若BX 0124H 则该指令执行的操作是将0124H作为操作数的偏移地址 将当前数据段中0124H单元中的字取出送CX 即CX 1958H 操作数为带方括号的寄存器 SI DI BX BP 寄存器的内容为操作数据的偏移地址 2 4间接寻址 注 寄存器寻址中 寄存器内容即为操作数据 间接寻址属于存储器寻址 寄存器内容为操作数据的偏移地址 只有SI DI BX BP可用于间接寻址例 MOVAX CX 若以SI DI BX间址 约定段的段地址为DS寄存器例 MOVAX BX DS BX AX若以BP间址 约定段的段地址为SS寄存器例 MOVAX BP SS BP AL SS BP 1 AH 2 4间接寻址 操作数据在存储器中 其偏移地址为基址寄存器BX或BP的内容与位移量之和EA BX BP 位移量例1 MOV BX BUF 2 AL或MOVBUF BX 2 AL AL DS BX BUF 2 例2 MOV6 BP AX或MOV BP 6 AX AL SS BP 6 AH SS BP 7 3 2 5基址寻址 3 2 6变址寻址 操作数据在存储器中 其偏移地址为变址寄存器SI或DI的内容与位移量之和 与基址寻址类似EA SI DI 位移量例 MOVAX 2 SI 或MOVAX SI 2 DS SI 2 AL DS SI 3 AH 3 2 7基址变址寻址 EA BX BP SI DI 位移量例 MOVAX 4 BX DI 或MOVAX BX DI 4 DS BX DI 4 AL DS BX DI 5 AH段地址由基址寄存器确定 以BX为基址寻址 操作数在DS段以BP为基址寻址 操作数在SS段 操作数据在存储器中 其偏移地址为指令中指定的基址寄存器和变址寄存器的内容及位移量3项之和 例 W为一字变量 B为一字节变量 则 MOVAL W BX MOVAL BYTEPTRW BX MOVAX B SI 5 MOVAX WORDPTRB SI 5 变量名意义是取变量单元中的数据 所以其类型要与另一操作数的类型一致 在符号指令中的基址 变址 基址变址三种寻址中 其位移量可以是常数或符号常量 还可以是变量名 若是变量名 它给出变量所在段的偏移地址例 将立即数35H存入字节变量BUF 5单元中MOVBX OFFSETBUF 5MOVBYTEPTR BX 35H 间接寻址或 MOVBX 5MOVBUF BX 35H 基址寻址 常以间址 基址 变址访问一片连续的单元例 B1DB AB MOVBX OFFSETB1 BX 0000HMOVAL BX AL 41HMOVAL BX 1 AL 42H 寻址方式小结 寻址方式可分为三大类 立即寻址 寄存器寻址 存储器寻址 直接寻址 间接寻址 基址寻址 变址寻址 基址变址寻址都属于存储器寻址 立即寻址的操作数为立即数 寄存器寻址的操作数为寄存器 存储器寻址的操作数为地址表达式 地址表达式通式为 变量 寄存器 常量 也可表示为 变量 寄存器 常量 此种形式理解为 寄存器 常量是变量定义的数据区的位移量 寻址方式小结 如果地址表达式中只出现寄存器 则一定要加 如果地址表达式中没有寄存器 则可加 也可不加如果地址表达式中只有寄存器 则为间接寻址 如果地址表达式中只有变量 则为直接寻址 如果地址表达式中除有寄存器外还有变量或者常量 则为基址寻址或变址寻址 存储器存取方式约定段段更换偏移地址 1 存储器寻址时段寄存器的基本约定和段更换见下表所示 P50表2 1 取指令CS不允许IP堆栈操作 PUSH POP CALL RET等 SS不允许SP数据存取 BP间址 基址除外 DSCSSSESEABP间址 基址数据存取SSCS DS ESEA字符串处理指令的源串DSCS SS ESSI字符串处理指令的目的串ES不允许DI 3 2 8存储器寻址中段地址的确定 例 MOVES DI AL AL ES DI MOVES 2000H AL AL ES 2000H其中 ES为前缀字节 当要否认以上默认状态 到其他段寻找操作数时 必须用跨段前缀指明操作数所在段的段寄存器名 2 段超越或段更换 段更换只是用来临时改变变量 标号 地址表达式的段属性 且只在所出现的语句中有效 不改变偏移地址和类型 第三章汇编语言与汇编程序 3 1 符号指令中的表达式 符号指令的寻址方式 常用指令 3 2 伪指令 3 3 3 4 3 5 常用系统功能调用和BIOS 数据传送指令 加减运算指令 位操作 逻辑运算 指令注 学习时注意指令格式及功能 3 3常用指令 1 数据传送指令格式 MOVdest source目的操作数源操作数功能 将一个字节或一个字操作数据从源传送至目的地址中 源保持不变 3 3 1数据传送类指令 指令特点 将数据从一个部位传送到另一部位 不影响数据的状态标志位 MOV指令的9种形式 MOVREG REGMOVREG IMMMOVMEM IMMMOVMEM REGMOVREG MEMMOVSEGREG REG CS除外MOVREG SEGREGMOVSEGREG MEM CS除外MOVMEM SEGREG 一个指令中 两操作数类型必须一致至少1个操作数的类型要明确 不能出现二义性代码段寄存器CS和立即数均不能作为目的操作数源操作数和目的操作数不能同时为存储器操作数存储器类型由地址表达式的变量名确定立即数的类型属性不明确 字 字节 在立即数送存储器的指令中 若存储器操作数的类型不明确 则必需使用算符来明确其中一个操作数的属性 注意 格式 XCHGdest source功能 将源地址与目的地址中的内容互换XCHGREG REGXCHGREG MEMXCHGMEM REG 2 数据交换指令 例 数据段中有两个字变量W1和W2 编写程序段将两个字变量互换W1DW1234HW2DW5678H 用数据交换指令实现 MOVAX W1 AX 1234HXCHGAX W2 AX 5678H W2 1234HMOVW1 AX W1 5678H 仅用MOV指令实现 MOVAX W1MOVBX W2MOVW1 BXMOVW2 AX 用堆栈操作指令 PUSHW1PUSHW2POPW1POPW2 练习 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令 要求使用以下几种寻址方式 寄存器间接寻址 基址寻址 基址变址寻址 加减运算的操作数 注 两操作数需类型相同 不能同为存储器加减法指令执行后的结果将影响状态标志Flag 3 3 2加减运算指令 1 加法类指令 格式 ADDdest source操作 source dest dest即将源操作数据与目的操作数据相加 结果存入目的地址中 源地址内容不变 2 加进位的加法指令ADC 格式 ADCdest source操作 dest source CF dest CF为前面指令产生的CF 例3个32位无符号数12345678H 8765ABCDH和2468FEDCH相加 其和 仍为32位无符号数 放DX和AX中 程序段如下 MOVDX 1234HMOVAX 5678HADDAX 0ABCDHADCDX 8765HADDAX 0FEDCHADCDX 2468H 格式 INCdest操作 dest 1 dest例 MOVBX 1INCBX BX 0002H该指令不影响CF 对其它标志位的影响同ADD单操作数指令 只能为REG MEM 类型要明确 不能出现二义性例 INCCL INC SI INCBYTEPTR SI INC2000H 该指令常用于修改偏移地址和计数次数 3 增量指令INC 例 有两个无符号字数组 每个数组20个字 分别放在8000H和9000H开始的存储单元中 要求进行数组对应字单元相加运算 得到的和放在8000H开始的内存单元中 然后将AX清0MOVSI 8000HMOVDI 9000HMOVCX 20LP1 MOVAX SI ADDAX DI MOV SI AXINCSIINCSIINCDIINCDIDECCXJNZLP1 转移指令 结果不为0则转到LP1 否则转到下一条指令MOVAX 0 格式 DECdest操作 dest 1 dest 1 减法指令SUB 2 减法类指令 格式 SUBdest source操作 dest source dest 2 带借位减指令SBB 格式 SBBdest source操作 dest source CF dest CF为前面指令产生的进位 借位 3 减量指令DEC 例 2个32位无符号数8765ABCDH和2468FEDCH相减 其差送DX和AX 程序段如下 MOVAX 0ABCDHSUBAX 0FEDCH CF 18765ABCDMOVDX 8765H 2468FEDCSBBDX 2468H CF 062FCACF1注 减法类指令对标志位的影响 除将进位改为借位外 与加法类指令相同DEC不影响CF 其余标志均受影响 3 比较指令CMP格式 CMPdest source操作 dest source执行减操作 只影响标志 不改变操作数主要用来判断两数的大小是否相等后面常跟条件转移指令 根据比较结果实现程序的分支 例 在自BLOCK开始的内存缓冲区中 有100个带符号数 要找出其中的最大值 把它存放到MAX单元中 MOVBX OFFSETBLOCKMOVAX BX INCBXINCBXMOVCX 99AGAIN CMPAX BX JGNEXTMOVAX BX NEXT INCBXINCBXDECCXJNZAGAINMOVMAX AXHLT 格式 NEGdest操作 将操作数地址中的内容求补后再送入操作数地址中该指令是求补操作 而不是求补码操作单操作数指令 操作数只能是REG MEM影响标志 影响规律同减法指令 3 3 3位操作指令 1 逻辑运算指令 1 求补指令 若将执行求补指令前后的数均视为补码数 则求补指令将该数变为绝对值相等符号相反的另一个数 例 MOVAX 0FFFBH AX FFFBHNEGAX AX 0005H例 MOVBX 000AH BX 000AHNEGBX BX FFF6H 格式 NOTdest操作 将操作数地址中的内容逐位取反后再送回操作数地址中注 该指令只是执行求反操作 而不是求反码指令 对符号位也求反该指令不影响标志位 2 求反指令NOT 格式 ANDdest source操作 dest source dest作用 取出目的操作数中与源操作数的 1 对应的位例 MOVAX 0F6E5HANDAX 000FH AX 0005H 3 逻辑与指令AND 格式 ORdest source操作 dest source dest作用 将目的操作数和源操作数中的所有 1 位拼合在一起例 MOVBX 7B00HORBX 0056H BX 7B56H 对应 1 位置1 对应 0 位则不变 4 逻辑或指令OR 格式 XORdest source操作 dest source dest 作用 将REG清0 也可将目的操作数中的某些位取反例 MOVCX 35EBHXORCX CX CX 0000H思考 用什么方法可以实现对通用寄存器清0 XORAX AXMOVAX 0SUBAX AXANDAX 0 5 逻辑异或指令XOR 注 AND OR XOR指令均为双操作数指令 对源操作数和目的操作数的要求同加减指令AND OR XOR三条逻辑指令均将标志位CF和OF清0 对PF SF ZF的影响同加操作此类指令常用于拆字 拼字 例 将AX的高4位 CX的中间8位 BX的低4位拼合起来 结果放CX中 程序段如下 如 AX 1234H BX 5678H CX 9ABCH CX 1AB8HANDAH 0F0H 取AX高4位 AH 10HANDBL 0FH 取BX低4位 BL 08HANDCX 0FF0H 取CX中间8位 CX 0AB0HORCH AH 拼字CH 1AHORCL BL CL 0B8HCX 1AB8H 目的操作数可以是8位或16位的REG或MEM源操作数为移位的次数 只能是CL或1以CL为源操作数的移位指令执行以后 CL的值不变 2 移位指令 移位指令为双操作数指令 用于将目的操作数中的8位或16位二进制数移位 格式 SHRdest source操作 最后移出位移至CF用0填补已空出的位例 AL abcdefgh CL 3SHRAL 1 执行后 AL 0abcdefg CF h例 AL abcdefgh CL 3SHRAL CL 执行后 AL 000abcde CF f 1 逻辑右移SHR 格式 SARdest source操作 最后移出位移至CF 最高位向右移动同时保持不变例 AL abcdefghSARAL 1 执行后 AL aabcdefg CF h 2 算术右移SAR 注 逻辑右移SHR一位 等于对无符号数除以2运算例 MOVAL 0CH AL 12SHRAL 1 AL 6算术右移SAR一位 等于对符号数除以2运算例 MOVCH 80H CH 80H 128SARCH 1 CH C0H 64 格式 RCRdest source操作 前面指令产生的CF移至最高位例 AL abcdefgh CF i CL 4RCRAL CL执行后 AL fghiabcd CF e 带进位循环右移RCR 例1编写程序段实现将字变量W中的无符号数除以8 商和余数分别放入字变量QUOT和字节变量REMA中思路 用逻辑右移1位的指令 将被除数按低位到高位的顺序1次移1位 每次移入CF中的余数 用带进位的循环右移指令移入字节变量REMA中 3位余数都移入字节变量REMA中后再用逻辑右移指令右移5位将3位余数从D7 D5移至D2 D0 指令应用举例 WDW65525QUOTDW0REMADB0MOVAX W AX 1111111111110101BSHRAX 1 AX 0111111111111010B CF 1RCRREMA 1 REMA 10000000BSHRAX 1 AX 0011111111111101B CF 0RCRREMA 1 REMA 01000000BSHRAX 1 AX 0001111111111110B CF 1RCRREMA 1 REMA 10100000BMOVQUOT AX QUOT 0001111111111110BMOVCL 5SHRREMA CL REMA 00000101B 格式 SHLdest sourceSALdest source操作 最后移出位移至CF用0填补已空出位例 AL abcdefghSHLAL 1 执行后 AL bcdefgh0 CF a 4 算术 逻辑左移SAL SHL 格式 RCLdest source操作 前面指令产生的CF移至最低位例 AL abcdefgh CF iRCLAL 1执行后 AL bcdefghi CF a 5 带进位循环左移RCL 格式 RORdest source操作 右边移出位移入CF 同时移入左边空出位例 AL abcdefghRORAL 1执行后 AL habcdefg CF h 6 循环右移ROR 格式 ROLdest source操作 左边移出位移入CF 同时移入右边空出位例 将相邻字节变量B1 低地址 和B2中的两个8位二进制数交换MOVCL 8ROLWORDPTRB1 CL 7 循环左移ROL 思路 W 10 W 23 2 W 23 W 216位无符号数乘以2和乘以8分别用左移1位和左移3位实现16位无符号乘以2有可能大于16位无符号数的最大值65535 因此要将它扩展为32位的无符号数再乘以2 即用逻辑左移双字来实现乘以2的操作 例2编写程序段将字变量W中的无符号数乘以10 积放字变量J2中 指令应用举例 WDW65525J2DW0 0MOVAX WXORDX DX DX清0 将16位无符号数扩展为32位SHLAX 1 乘以2RCLDX 1MOVJ2 2 DX 保存乘以2的结果MOVJ2 AXSHL AX 1 W中的内容乘以4RCLDX 1SHLAX 1 W中的内容乘以8RCLDX 1ADDJ2 AX 2 W 8 W ADCJ2 2 DX 例3字变量NUMW中有一无符号数 编写程序 计算 NUMW 16 30并将结果送入NUMW 2和NUMWNUMWDW1234H 0MOVCL 4ROLNUMW CL 将NUMW字单元中的1234H变成2341HMOVAX 000FHANDAX NUMW 取低位字的最低4位AX 0001HANDNUMW 0FFF0H 清低位字的最低4位 NUMW 2340HADDNUMW 30 低位字加30ADCAX 0 将低位字加30的进位 若产生 加入高位字MOVNUMW 2 AX 例4将AX中小于256大于0的3位BCD数转换为二进制数 存入字节变量SB中思路 用 百位 10 十位 10 个位的方法将BCD数转换为二进制数如将BCD数255H转换为二进制数11111111B 运算的过程为 SBDB0MOVCL 2SHLAH 1 百位 2MOVSB AH 暂存2 百位SHLAH CL 百位再乘以4得23 百位ADDAH SB 23 百位 2 百位得10 百位MOVSB AL 暂存十位和个位SHRAL CL 取十位SHRAL CLADDAH AL 10 百位 十位MOVAL SB 十位和个位送ALSHLAH 1 10百位 十位 10MOVSB AHSHLAH CLADDSB AH 23 10百位 十位 2 10百位 十位 ANDAL 0FH 取个位ADDSB AL 加上个位 第三章汇编语言与汇编程序 1 3 符号指令中的表达式 符号指令的寻址方式 常用指令 2 伪指令 4 5 常用系统功能调用和BIOS 参见教材P66一般程序由三个段组成 教材中程序的小写字母部分均为程序结构 4 7宏汇编源程序的一般格式 stacksegmentstack stack 定义堆栈段及堆栈长度dw32dup 0 stackendsdatasegment 定义数据段 dataendscodesegment 定义代码段beginprocfar 将汇编源程序视为DOS下的子程序assumecs code ss stack ds datapushds PSP的段地址 段地址在DS中 进栈subax axpushax PSP首地址的偏移地址进栈movax data 设置用户数据段movds ax ret PSP的首地址出栈送IP和CSbeginendpcodeendsendbegin 格式 过程名PROC NEAR 或FAR 过程名ENDP注 PROC和ENDP必须成对出现PROC和ENDP前的过程名必须有且相同过程的类型由PROC的操作数确定 默认为NEAR类型由过程定义伪指令定义的子程序 通过CALL指令调用PROC和ENDP之间至少有一条子程序返回指令RET 以返回调用它的程序 4伪指令 4 1过程的定义 格式 段名SEGMENT 定位方式 组合方式 类别名 段名ENDSSEGMENT和ENDS必须成对出现 且前面的 段名 相同三个可选项主要用于多模块化程序设计 以告诉LINK程序各模块间的通信方式和各段间的组合方式 从而把各模块正确地连接在一起段名用来表示段地址 4 2段的定义 组合方式提供本段同其他段的组合关系 1 NONE 无组合方式系统隐含的组合方式 表示本段与其他段逻辑上不发生关连 2 STACK将本段与其他模块中所有STACK组合方式的同名段组合成一个堆栈段一个程序的所有模块中至少有一个STACK段类别名是用单引号括起来的字符串 连接时将同类别名的所有段 段名可以不同 存放在连续的存储区典型的类别名有 DATA CODE STACK 定位方式表明如何将经组合后的段定位到存储器中 1 PARA 节 隐含的定位方式 规定段的起始地址总是16的整数倍 即段首址低四位为零 2 WORD 字 段从偶地址开始 段间可能留1个字节间隙 3 Byte 字节 本段可从任何地址开始 段间不留空隙 4 Page 页 段的起始地址总是256的整数倍 即低8位为零 用 表示 记录正在被汇编程序翻译的指令的地址例 DATASEGMENT 段定义BUFDB 0123456789ABCDEF COUNTEQU BUF 定义常量COUNT 16DATAENDS 的值由ORG设置 格式为 ORG数值表达式 数值表达式的值 4 3汇编地址计数器 源程序在代码段的开始需要对段寄存器与段之间的关系作假定 以便汇编程序根据给定的偏移地址和段寄存器计算出正确的物理地址格式 ASSUME段寄存器 段名 段寄存器 段名 注 ASSUME只是告诉汇编程序段寄存器与段间的对应关系 并没有将段首址置入对应的段寄存器中 程序最后运行时 CS和SS的内容由系统自动设置 但DS和ES必须由程序将其段首址分别置入 4 4段寄存器的假定 格式 END 表达式 功能 源程序的最后一个语句 标志整个源程序结束 即告诉汇编程序 汇编到此结束表达式为可选项 必须是存储器地址 即程序的启动地址 常为过程名不带表达式 则该程序不能单独运行 只是供其他程序调用的子模块 4 5源程序的结束 第三章汇编语言与汇编程序 1 3 符号指令中的表达式 符号指令的寻址方式 常用指令 2 伪指令 4 常用系统功能调用和BIOS 5 IBMPC微机系统为汇编用户提供了两个程序接口 一个是DOS系统功能调用 另一个是ROM中的BIOS BasicInput OutpuTSystem 它们由一系列中断服务子程序构成 由软中断指令INTN来调用 通过中断返回指令IRET返回 5常用系统功能调用和BIOS 1 调用的一般过程 5 1系统功能调用 调用格式 MOVAH 1INT21H入口 无入口参数出口 键入字符ASCII码值在AL中 回显 2 常用功能调用参见P76表示2 3 1 1号功能调用 键入并显示一个字符 例1 设计一程序段 从键盘读入两个1位的十进制数 将它们相加后把结果存入AL中 MOVAH 01INT21h 从键盘读入第一个数的ASCII码 存入AL SUBAL 30hMOVBL AL 将ASCII码转换为十进制数转存入BL MOVAH 01INT21H 从键盘读入第二个数的ASCII码 存入AL SUBAL 30H 将第2个数转换为十进制数 存入ALADDAL BL 调用格式 MOVDL 待显示字符的ASCIIMOVAH 2INT21H入口 输出字符的ASCII送DL出口 无出口参数例 显示字符 B MOVAH 2MOVDL B INT21H 2 2号功能调用 显示器显示一个字符 例2 从键盘输入一个字符 并同时在显示屏上输出 当键入字符 时 则停止操作 DON1 MOVAH O1H 置单字符输入INT21HCMPAL 是结束字符吗JZDON2 是 转向DON2MOVDL ALMOVAH 02H 显示输出字符INT21HJMPDON1DON2 INT20H 程序结束 调用格式 MOVDX 待显示字符串的首偏移地址MOVAH 9INT21H入口 DS DX置字符串首地址 字符串以 结束出口 无出口参数 3 9号功能调用 显示器显示字符串 例 显示A Z26个字符方法一 用2号功能调用 单个字符依次输出方法二 定义一个存储区 存放26个字符 并以 结束 用9号功能调用输出字符串OBUFDB ABCD XYZ MOVDX OFFSETOBUFMOVAH 9INT21H 调用格式 MOVDX 数据区的首偏移地址MOVAH 10INT21H变量数据区IBUF应在DS数据段中事先定义 其定义格式为 IBUFDB数据区大小 0 数据区大小DUP 0 4 10号功能调用 键入字符串 存放字符串数据区的首地址在DS DX中数据区大小是一无符号数 可以为0 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论