




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理与接口技术 第三章汇编语言程序设计 ASM OBJ EXE 编译 连接 编译程序 MASM EXE 连接程序 LINK EXE 用户编写程序 程序在计算机中运行 计算机的控制由操作系统交给用户程序 运行用户程序 当用户程序运行结束后 应再将控制权交回操作系统 所以 在程序中应该有返回DOS的指令 在计算机中 返回DOS的指令是操作系统中的一个子程序 用户使用时应调用这个子程序 每当一个用户的可执行文件 EXE装入内存后 存储器的分配情况如图 00000H 100个字节 SS 用户程序空间 FFFFFH CS DS ES 无论用户程序有几段 也无论这些段的排列顺序如何 用户程序的代码前一定有100个字节的程序段前缀 ProgramSegmentPrefix 简称PSP PSP给出了用户的可执行文件 EXE 的若干控制信息 其中PSP的开始处 第1 2字节 有一条中断指令INT20H的代码 这条指令的功能是结束用户程序 返回操作系统 在用户程序执行完以后 通过执行该条指令就可以返回DOS 如何使用户程序执行完后返回来执行这条指令 DS ES SS CS 首先将用户程序定义为一个远过程 当可执行文件装入内存后 DS ES两个段寄存器被CPU自动设置为指向PSP的首址 所以一般程序的开始指令为 PUSHDSXORAX AXPUSHAX即将DS的内容和0000H压入堆栈 程序结束时的最后一条语句为RET 就把压入堆栈的PSP段的段基址和偏移量0000H弹出并送入CS和IP 转而执行返回DOS的指令INT20H 堆栈情况 返回操作系统的另一个办法是用系统调用中断指令 INT21H 在用户程序结束时 用下面两条指令 MOVAH 4CHINT21H这两条指令经常用在短的程序段中 即用户程序并不是一个完整的汇编程序 而只是由一些指令组成的 没有堆栈区或数据区的程序段 第一节伪指令 伪指令 伪指令不是处理器运行的指令 而是程序员给汇编编译程序下达的命令 是在编译源程序期间由汇编编译程序执行的命令 因为程序要分段放在内存内 编译程序必须要知道每段的起始位置 为CPU的段寄存器分配地址 如果程序中有变量 还要定义变量空间 存放数据 结果 知道源程序的开始 结束标志 伪指令语句 在汇编时不产生二进制代码 仅为编译程序提供汇编时所需要的信息的语句 一 段定义 一般的源程序分为4个段 代码段Code 数据段Data 堆栈段Stack 附加段Extra 各个段从段定义语句开始 到段结束语句ENDS结束 段名SEGMENT定位类型组合类型类别 段体 段名ENDS 用户指定 可任选定义 段名必须是合法是标识符 定位类型 内存可以看成是一本书 将其分成页 段 字 和字节 每256个地址为一页 PAGE 每页的起始地址为二进制 0000000016进制 00H 第一页 256个地址 第二页 256个地址 00000H 000FFH 00100H 00200H 001FFH 每16个地址为一段 PARA 每段的起始地址为二进制 000016进制 0H 第一段 16个地址 第二段 16个地址 00H 0FH 10H 1FH 20H 段 节 是默认的定位类型 每2个地址为一个字 WORD 每个字的起始地址为偶数 最基本的类型是字节 BYTE 字节只包含一个地址 可以是内存的任何空间 定位类型表示所定义的段存放在内存空间时 段首地址对内存空间的要求 即段起始点是放在一页的起点上 PAGE 还是一段的起点上 PARA 等 如果不定义定位类型 编译程序将默认其为段类型 即将段首地址放在从 0H开始的内存空间 BYTE 表示本段起始单元可以从任一地址开始 WORD 表示本段起始单元从一个偶地址开始 PARA 表示本段起始单元从一个段的边界开始 默认 PAGE 表示本段起始单元从一个页的边界开始 组合类型 组合类型是告诉编译程序 所定义的段与其他段的关系 即将该段存放内存时 是否将该段与其他段在物理上或逻辑上放在一起 常常一个汇编程序可以有很多代码段 数据段或堆栈段 这时 就要综合考虑各段的组合类型 NONE 表示本段与其他段不发生任何关系 该段有自己的基地址 是默认的组合关系 PUBLIC 在满足定位类型的前提下与其他模块的同名段连接在一起 形成一个新的逻辑段 共用一个段基址 COMMON 表示产生一个覆盖段 连接时 把本段与其他也用COMMON说明的同名段置成相同的起始地址 重叠在一起 共享相同的存储区 其段长度由最长的段确定 STACK 在每个汇编程序中 只能必须有一个堆栈段 连接时 将本段与其他也用STACK说明的同名段连接成一个连续的大的STACK段 编译程序自动初始化SS和SP寄存器 使SS的内容为该连续段的首址 SP指向堆栈底部加1的存储单元 MEMORY 表示本段在存储器中应定位在所有其他段的最高地址 AT 表示本段从表达式指定的地址处开始装入 这样 在程序中用户就可以直接定义段地址 这种方式不适用于代码段 类别 是用单引号括起来的字符串 连接时 LINK程序把类别相同的段放在连续的存储区中 可以不同名 类别名可以任意 但一般为 CODE STACK DATA 等 表明该段的类型 例如 定义堆栈段如下 STSEGMENTPARASTACK STACK DB100DUP STENDS 段名 组合类型 类别 定位类型 堆栈长度 段结束 通过定义 自动初始化了SS和SP SS 0000H SS 0063H SS 0064H 100字节 SP 连接两个汇编语言目标程序时 它们的数据段同名 组合类型为PUBLIC 定位类型为PARA 连接后第一个目标程序的数据段的起始物理地址是01010H 长度为17AH 则第二个目标程序数据段的起始物理地址为多少 01010H 17AH 0118AH 因为第二个数据段的定位类型为PARA 故应从节 段 的边界开始 01190H 因为组合类型为PUBLIC 所以共用一个段基址 在内存中顺序存放 现有汇编目标程序A和B 它们的数据段类别名相同 组合类型皆为COMMON 若A程序数据段中有字符串 ABC B程序数据段中有字符 DEF 则执行连接操作LINKA B后 产生目标程序的数据段中偏移地址为0000H单元的内容是什么 因为COMMON类型为覆盖 所以组合后B覆盖A 44H 二 过程定义 过程的含义和子程序是一样的 一个码段中可以包含一个或许多过程 码段名SEGMENT过程名1PROCFAR RET过程名1ENDP过程名2PROCNEAR RET过程名2ENDP 码段名ENDS FAR 该过程为远过程 调用该过程时为段间调用 即CS和IP均要重新赋值 NEAR 该过程为近过程 调用该过程时为段内调用 只赋值IP 默认 过程名1PROCFAR RET过程名1ENDP 过程名是合法的标识符 一个程序的主过程 起始指令所在的过程 应是FAR过程 因为该过程是DOS调用的 过程中应有RET指令 以便返回到调用处 过程可以嵌套调用 但不可以嵌套定义 过程开始 过程结束 例 延时100ms的子程序 编程如下 DELAYPROCMOVBL 10AGAIN MOVCX 2801HWAIT LOOPWAITDECBLJNZAGAINRETDELAYENDP 三 段寻址 虽然定义了段 但由于段名是任意的 编译程序仍然不知道哪个段是码段 哪个段是数据段等 所以在码段中要用ASSUME伪指令进行说明 告诉编译器不同的段寄存器分别对应哪个段地址 ASSUME段寄存器 段名 段寄存器 段名 当汇编程序遇到一个段名时 就自动地引用给出的段寄存器对段名加以汇编 但汇编程序将DS和ES的值赋为PSP首址的值 在程序中还要由MOV指令重新对DS赋值 正确的DS地址 MOVAX 数据段名MOVDS AX 四 结束语句END ENDS 段结束ENDP 过程结束END 整个汇编源程序结束 不配对使用 汇编程序在编译时遇到END 便得知源程序已经结束 END表达式 表达式为可执行程序运行的起始位置 一般为主过程名 五 ORG ORG表达式 指定了在其后的指令或数据存放的偏移地址 ORG0100HMOVAX 0 表明该指令放在码段 其偏移地址为0100H 码段的首地址从CS 0000H处开始 六 完整结构 DATASEGMENTXDB3YDB5DATAENDSSTACKSEGMENTSTACK STACK DB100DUP STACKENDSCODESEGMENTASSUMECS CODE DS DATA SS STACKBEGINPROCFARPUSHDSXORAX AXPUSHAXMOVAX DATAMOVDS AX RETBEGINENDPCODEENDSENDBEGIN 将PSP首址压栈 以便返回DOS 设置DS段寄存器内容 源程序结束 第一条指令的地址 分配段寄存器 主过程名 数据段 堆栈段 返回DOS PUSHDSXORAX AXPUSHAXMOVAX DATAMOVDS AX 标准程序前奏 一般写在代码段开始 第二节数据定义 一 常量 变量及标识符 常量 二进制 B 八进制 Q 十六进制 H 十进制 D 默认 10001100100B244Q64H 变量 代表存放在某些存储单元的数据 这些数据在程序的运行期间随时可以修改 在程序中以变量名的形式出现 定义变量 给变量分配存储单元 为这个单元起名字 变量名 可以同时将这些存储单元预置初值 每个变量都有三个属性 段属性 SEG 变量所在的存储单元的段基址偏移量属性 OFFSET 变量所在的存储单元距段起点的字节数类型属性 TYPE 一个单位变量占用存储单元的字节数 分为 DB 1个字节 DW 2个字节 DD 4个字节 DATASETMENTXDB5 4YDW40HZDD2030HDATAENDS DS 0000H X Y Z X Y Z分别都有三个属性 段基址 偏移量 类型值这三个属性都有固定的值 标识符 给指令或某一存储单元地址所起的名字 标识符由下列字符组成 字母 A Z a z 数字 0 9 特殊字符 数字不能作标识符的第一个字符 必须作标识符的第一个字符 标识符最长为31个字符 标识符后面跟冒号时 表示标号 代表该行指令的起始地址 标号可以被转移 调用指令直接引用 标识符后面不带冒号时 表示变量 标号 代码段中某一条指令的地址 标号有3个属性 段属性 SEG 该条指令所在段的段基址偏移量属性 OFFSET 该指令的偏移地址 距段起点的字节数 距离属性表示该标号是作为段内还是段间被调用或转移的 该属性有两个值 NEAR FFFFH 1 本标号只能被标号所在段的转移或调用指令所访问 段内转移 标号后有冒号 FAR FFFEH 2 本标号可被其他段 不是标号所在段 的转移或调用指令访问 段间转移 标号名LABELFAR 二 数据定义伪操作 DB 定义字节 其后的每个操作数占有一个字节单元 连续存放 BUFFERDB2 3 5 DW 定义字 其后的每个操作数占有两个字节 BUFDW2 3 5 DD 定义双字 其后每个操作数占4个字节 若仅保留单元 不初始化 用 代替初值 若数据重复 用nDUP 代替 n为重复次数 STRINGDB HELLO ARRAYDB100DUP 6个字节的存储单元 内为各字符对应的ASCII码 字符串用单引号标识 保留100个字节 首地址为ARRAY 不初始化 即100个字节内均为随机值 DATA1DB100DUP AB 初始化200个字节 内有100个41H 42H 使用汇编语言定义的伪操作命令是 VALDB93DUP 5 2DUP 1 2DUP 3 4 则在VAL存储区前10个字节单元的数据是 5 1 3 3 4 1 3 3 4 5 若定义DB1 2 5DUP 0 1 2DUP 3 则在存储区前7个单元的数据是 1 2 0 1 3 3 0 三 等值伪操作 名字EQU表达式 名字 表达式 给名字定义一个值或其他符号名或一条可执行语句 在汇编时 凡是出现该名字的地方就用定义的数据替代 用EQU赋值的名字不能重新赋值 但可用PURGE释放后重新定义 TIMESEQU50BUFDBTIMESDUP 等效于 BUFDB50DUP ALPHAEQU256BETA ALPHA 2 DATASEGMENTADW3BDW4LEQUB ADATAENDS DS 0000H 数据段 L为常量 不占空间 值为2 变量在数据段出现 一般为偏移量 在程序段出现 为存储空间的内容 MOVAX AMOVBX BADDAX BX AX 3 BX 4 AX 7 DATASEGMENTADW3 7BDW14LEQUBXDWBYEQUB ADATAENDS DS 0000H 数据段 L B Y 0004H MOVAX LMOVAX XMOVAX AMOVAX A 2MOVBX Y AX 000EH AX 0004H AX 0003H AX 0007H MOVAX B X 0004H BX 0004H 第三节汇编语言运算符 汇编语言运算符 是编译程序在编译时计算的 与运算指令不同 指令是在程序运行时计算的 一 算术运算符 MOD SHL SHRMOVAX A B二 逻辑运算符AND OR XOR NOTCEQUB AANDAX CANDOFH 三 关系运算符EQ NE LT GT LE GElessthan greatthan结果产生一个逻辑值 真为0FFFFH 假为0000H MOVAX choiceLT20 AND5 OR choiceGE20 AND6 注意 算术运算符总可以用于数字操作 其结果也是数字的 当应用于存储器操作数时 只有 运算符有意义 逻辑运算符的操作数也必须是数字 存储器操作数不能进行逻辑运算 关系运算符连接的两个操作数 必须都是数字的或是在同一段内的存储器地址 四 值返回符1 运算符 当前地址偏移量的值 BLOCKDB HELLO NUMEQU BLOCK NUM为6 STR1DW AB STR2DB16DUP CNTEQU STR1 MOVCX CNTMOVAX STR1HLT CX为18 AX为4142H STR1DW4142H STR1DB41H 42H DATASEGMENTNAEQU15NBEQU10NCDB2DUP 4 2DUP 5 2 CNTDB NCCWTDW CNTNDDWNCDATAENDS 设数据段定义如下 从DS 0000H开始至CNT单元之前存放的数据依次为 ND单元中的值为 CWT单元中的值为 CNT单元中的值为 4 5 2 5 2 4 5 2 5 2 0000H 1 0AH SEG和OFFSETSEG 求标号或变量的段基址OFFSET 求标号或变量的距段首址的偏移量 DATASEGMENTADB12BDW23 25DATAENDS MOVBX OFFSETBMOVAX SEGBLEABX B BX 0001H AX DS值 BX 0001H与MOVBX OFFSETB DATASEGMENTTABLEDW10 20 30 40 50ENTRYDW3DATAENDS MOVBX OFFSETTABLEADDBX ENTRYMOVAX BX 0000H BX 3 AX 1E00H 3 TYPE标号或符号的类型值对变量 表示变量的字节数DB1 DW2 DD4对标号 表示过程或指令地址的调用类型 NEAR 1或 FAR 2 DATASEGMENTADB12BDW23 25DATAENDS MOVAX TYPEAMOVBX TYPEB AX 0001H BX 0002H 4 LENGTH和SIZE LENGTH 对DUP情况下 变量的项数或元素个数 在其他情况下该项属性为1 SIZE 对操作数分配的字节数 SIZE LENGTH TYPE ADB 1234 BDW5DUP 2 3DUP 0 CDW AB C D L1 MOVAL TYPEBMOVBL LENGTHBMOVAH SIZEAMOVBH SIZECMOVCL TYPEL1MOVCH SIZEB AL 2 BL 5 AH 1 BH 2 CL 0FFH CH 0AH 对于下面的数据定义 各条MOV指令单独执行后 请填充有关寄存器的内容 TABLE1DB TABLE2DW20DUP TABLE3DB ABCD MOVAX TYPETABLE1MOVBX TYPETABLE2MOVCX LENGTHTABLE2MOVDX SIZETABLE2MOVSI LENGTHTABLE3 AX 1 BX 2 CX 20 DX 40 SI 1 5 HIGH和LOW HIGH 对操作数取高字节 LOW 对操作数取低字节 NUMEQU0CDEFH MOVAH HIGHNUMMOVAL LOWNUM AH 0CDH AL 0EFH 五 属性运算符 用来给指令中的操作数指定一个临时的属性 而暂时忽略操作数定义时的属性 1 PTR定义操作数为新的类型 新类型PTR操作数 操作数可以是存储器的地址或标号名 F1DW1234HF2DB23H 56H 18H MOVAL BYTEPTRF1MOVAX WORDPTRF2 AL 34H AX 5623H DAT1DB12H 34HDAT2DB56H 78H MOVAX WORDPTRDAT1CMPAX WORDPTRDAT2JAL1MOVBX WORDPTRDAT2MOVWORDPTRDAT2 AXMOVWORDPTRDAT1 BXL1 HLT DAT1单元的值是 AX 3412H 7856H 56H 2 THIS指定新类型 像PTR一样可用来建立一个特殊类型的存储器地址操作数 而没有为它分配存储器 新的存储器操作数的段和偏移量部分就是下一个能分配的存储单元的段和偏移量 F1EQUTHISBYTEF2DW4321H 2255H MOVAL F1MOVAX F2 THIS类型名 F1 AL 21H AX 4321H F1和F2具有相同的段基地址和偏移地址 但类型不同 3 段超越 强迫当前指令的操作数按指定的段基地址寻址 MOVAX ES BX 4 SHORT 用于无条件转移指令JMP 通知编译器 转移的目标地址在 127 128之间 JMP标号 是三字节指令JMPSHORT标号 是两字节指令 第四节汇编语言程序 汇编语言编写的程序也跟高级语言类似 程序结构分三种 顺序 分支 循环 较复杂的程序也应该是由众多子程序组成的 每个子程序是一个过程 在程序中被显式地调用 变量等数据部分被定义在数据段 所有程序都要显式地定义堆栈段 汇编程序的每一条指令都与机器语言一一对应 因此 汇编生成的可执行文件代码少 适合于实时控制 但由于语法成分很少 不适合于复杂的算法 运算 汇编程序主要的调试环境是DOS系统下的DEBUG程序 DATASEGMENTDB1DB12H 34H 0 56HDW1DW78H 90H 0AB46H 1234HADR1DWDB1ADR2DWDW1BUFDB5DUP 0 DATAENDSCODESEGMENTASSUMECS CODE DS DATAMAINPROCFARSTART PUSHDSXORAX AXPUSHAXMOVAX DATAMOVDS AXXORCX CXMOVCL 3ADDADR1 CXSUBADR2 CXMOVBX ADR1 MOVDI BXMOVSI ADR2MOVAL DB1 BX MOVBUF DI ALMOVAX DW1 BX SI MOVWORDPTRBUF AXRETMAINENDPCODEENDSENDSTART 0000H 0003H ADR1 3 ADR2 1 DI 3 SI 1 0000H BX AL AL 56H BUF 56H 0004H BX SI AX AX AB46H ABH 46H 00H 00H 0004H DS SEGSEGMENTCOUNTDB4BLK1DB96H 74H 32H 16HBLK2DB65H 94H 87H 29HBLK3DB4DUP DS SEGENDSCS SEGSEGMENTASSUMECS CS SEG DS DS SEGMAINPROCFARSTART PUSHDSXORAX AXPUSHAXMOVAX DS SEGMOVDS AXMOVSI OFFSETBLK1MOVDI OFFSETBLK2MOVBX OFFSETBLK3MOVCL COUNTMOVCH 0CLC NEXT MOVAL SI INCSIADCAL DI INCDIDAAMOV BX ALINCBXLOOPNEXTRETMAINENDPCS SEGENDSENDSTART SI DI BX BCD码加法 DATASEGMENTTABLEDW1020H 2030H 3040H 4050H 5060HTEMPDW5DUP 0 COUNTDW5DATAENDSCODESEGMENTASSUMECS CODE DS DATAMAINPROCFARSTART MOVAX DATAMOVDS AXMOVES AXMOVCX COUNTLEASITABLELEADI TEMPCLDREPMOVSWLEASI TEMPMOVCX COUNTMOVDI OFFSETTABLEMOVBX CX SHLBX 1LOP1 DECBXDECBXMOVAX SI BX MOV DI AXADDDI 2LOOPLOP1MOVAX 4C00HINT21HRETMAINENDPCODEENDSENDSTART REPMOVSW在指令中的功能是 循环程序段LOP1的功能是 程序运行结束时TEMP 2 TEMP 8字单元的内容 程序运行结束时 DI的值为 复制数据块TABLE到TEMP 将原数据块倒排 2030H 5060H TEMP或TABLE 10 DATASEGMENTTABLEDW1020H 2030H 3040H 4050H 5060HTEMPDW5DUP 0 COUNTDW5DATAENDSCODESEGMENTASSUMECS CODE DS DATAMAINPROCFARSTART MOVAX DATAMOVDS AXMOVES AXMOVCX COUNTLEASITABLELEADI TEMPCLDREPMOVSWLEASI TEMPMOVCX COUNTMOVDI OFFSETTABLEMOVBX CX SHLBX 1LOP1 DECBXDECBXMOVAX SI BX MOV DI AXADDDI 2LOOPLOP1MOVAX 4C00HINT21HRETMAINENDPCODEENDSENDSTART 若将CLD改为STD 则程序运行结束时 TEMP 8字单元 TEMP字单元的内容分别是 1020H 1020H 第五节DOS功能调用 操作系统管理计算机 为用户提供与CPU对话的接口 也就是提供使用键盘和显示器的通道 操作系统同时管理设备 文件 这样 用户不需要具体掌握这些接口的地址 输入输出数据的格式 直接执行操作系统提供的命令就可以了 比如DOS命令 DIR TYPECOPY等 这是用户在操作系统层面上的调用 在运行用户程序时 DOS将操作权交给了用户程序 用户就无法再去执行DOS的操作命令了 这时 用户程序需要与键盘 显示器等系统资源打交道该怎么办 在高级语言中 在这种情况下都是调用编译系统提供的库函数 也即编译系统已把输入输出等操作功能做成函数的形式 用户只要依据函数的格式进行调用即可 在汇编程序中 如果用户程序要与输入输出设备打交道 就要调用现成的程序 这些程序是DOS系统的一部分 随着DOS系统驻留内存 用户需要按照这些程序要求的接口格式调用 这些完成不同功能的子程序是以中断服务程序的方式提供的 这些功能按不同的类别分成许多组 分别有不同的中断入口 在汇编程序中最常用的是INT21H中断入口 也称为DOS系统功能调用 这个中断入口中有许多小程序 每个小程序都被编上号 固定完成某一种功能 调用时有一定的格式 因为对某一个小程序而言 输入条件 入口参数 和输出结果 出口参数 的格式都是固定的 用户在使用时 既要给出小程序的编号 AH 又要按照其提供的格式进行调用 才能正确完成操作 系统功能调用的小程序有几十个 在这里只介绍与输入输出有关的一部分 1 在显示器上显示单个字符 2号功能 功能 在屏幕的光标处显示单个字符入口参数 要显示字符的ASCII码放在DL中出口参数 无 MOVDL A MOVAH 2INT21H 提供调用功能号 系统功能调用 在屏幕光标处显示字符A 运行至此 屏幕上当前光标处显示字符A 2 在屏幕上显示字符串 9号功能 功能 在屏幕上当前光标处输出存储在内存数据段的一串字符串 该字符串以 结束 入口参数 DS DX指向欲显示字符串的首址出口参数 无 DATASEGMENTSTRINGDB Iamastudent DATAENDS MOVDX OFFSETSTRINGMOVAH 9INT21H 指向字符串首址 提供调用功能号 系统功能调用 3 带显示的键盘输入 1号功能 功能 等待键盘输入 直到按下一个键 入口参数 无出口参数 键入键的ASCII码放在AL中 并在屏幕上显示该键 MOVAH 1INT21HMOV 2000H AL 提供调用功能号 系统功能调用 程序运行到此停下 等待用户键盘输入 用户从键盘键入的键的ASCII码进入AL中 4 不带显示的键盘输入 7号功能 功能 等待键盘输入 直到按下一个键 入口参数 无出口参数 键入键的ASCII码放在AL中 但在屏幕上没有显示 常用于输入密码 MOVAH 7INT21HMOV 2000H AL 提供调用功能号 系统功能调用 程序运行到此停下 等待用户键盘输入 用户从键盘键入的键的ASCII码进入AL中 该功能与1号功能类似 只是输入的字符不在屏幕上显示 5 字符串输入 10号功能 功能 等待从键盘输入一串字符到存储区的数据段 直到按下回车结束输入 入口参数 DS DX指向接收字符串的内存地址的首址 该地址的第一个字节是由用户设置的可输入字符串的最大字符数 含回车 出口参数 存放输入字符串存储区的第二个字节是实际输入的字符数 不含回车 实际输入的字符串从该存储区的第三个字节处开始存放 DATASEGMENTBUFDB20 20DUP DATAENDS LEADX BUFMOVAH 0AHINT21H 程序运行到此停下 等待用户键盘输入 若输入ABCD后 BUF DX 实际字符个数 开始存放 6 程序结束 返回DOS 4C号功能 功能 将控制权移交DOS 入口参数 无出口参数 无 MOVAH 4CHINT21H 在屏幕上显示What syourname 用户输入自己的名字 后显示 Welcome DATASEGMENTMEGDB What syourname 10 13 MEG1DB Welcome BUFDB30 30DUP 0 DATAENDSCODESEGMENTASSUMECS CODE DS DATAMAINPROCFARSTART MOVAX DATAMOVDS AXLEADX MEGMOVAH 9INT21HLEADX BUFMOVAH 10INT21H LEADX MEG1MOVAH 9INT21HXORBH BHMOVBL BUF 1MOV BX BUF 2 LEADX BUF 2MOVAH 9INT21HMOVAH 4CHINT21HMAINENDPCODEENDSENDSTART 输出字符串 接受姓名 输出Welcome 输出姓名 返回DOS 输入缓冲区以 结尾 显示字符串后回车换行 下面程序从键盘重复接收一字符送BUFF开始的单元 直到接收到回车符0DH为止 DATASEGMENTBUFFDB128DUP 0 DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AX LOP INT21HMOV SI AL JNELOPMOVAH 4CHINT21HCODEENDSENDSTART LEASI BUFF MOVAH 1 INCSI CMPAL 0DH 第六节宏指令 在汇编语言书写的源程序中 有的程序段要多次使用 为了简化书写 该程序段可以用一条特殊的指令来代替
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川绵阳市奥林匹克体育学校考核招聘教练员5人备考考试题库附答案解析
- 2025广西南宁市五一西路学校招聘老师4人备考考试题库附答案解析
- 2025年河北承德市直事业单位公开选调工作人员51名考试备考题库及答案解析
- 区块链食品溯源技术-洞察及研究
- 2025内蒙古产权交易中心及所属子公司(第二批)招聘笔试参考题库附答案解析
- 多光谱成像算法研究-洞察及研究
- 电商价格弹性分析-洞察及研究
- 购置税减半活动策划方案
- 山场巡查管理制度
- 手指印画小樱桃课件
- 临床基于ERAS理念下医护患一体化疼痛管理实践探索
- 外科术后患者营养宣教要点
- 安全技术交底书
- 统编版(2024)八年级上册道德与法治第一单元《走进社会生活》测试卷(含答案)
- 学堂在线 战场侦察监视技术与装备 章节测试答案
- DG-TJ08-2120-2025 集体土地所有权调查技术标准
- 2024年上海电子信息职业技术学院招聘笔试真题
- 消化内科重点专科申报
- 山东2025年中小学国防教育知识竞赛
- 脑卒中的饮食护理课件
- 遵守安全生产法 当好第一责任人
评论
0/150
提交评论