80x86汇编语言程序设计

合集下载

80X86汇编语言电子教案(3-2-MOV指令)

80X86汇编语言电子教案(3-2-MOV指令)

提供的基本寻址方式可以分为三类立即寻址寄存器寻址存储器寻址与存储器有关的寻址的有效地址由以下四种成分组成1位移量存放在指令中的一个81632位的数2基址存放在基址寄存器中的内容3变址存放在变址寄存器中的内容4比例因子386及后继机型增加的一个术语1无比例因子8086286386及后继机型共有位移量直接寻址基址或变址位移量基址或变址—基址变址寻址2带比例因子386及后继机型位移量变址比例因子比例变址寻址比例因子基址+比例因子说明这些寻址方式不仅可以用于源操作数的寻址也可以用于目的操作数的寻址唯一例外的是立即寻址只能用于源操作数例MOV [BX][DI]AX 则源操作数为寄存器寻址目的操作数为基址变址寻址存储器寻址时所确定的内存地址既可以是字节字也可以是双字地址那么上述指令的目的操作数的宽度是多少呢指令中操作数要具有明确的类型寄存器寻址类型确定存储器操作数寻址类型由变量的类型属性确定其它情况类型下操作数类型由指令中其它操作数的类型或指令缺省类型来确定确定的操作数为字类型指令指示对一定操作对象进行何种操作的命令指令系统计算机CPU的指令集合称为指令系统一指令集说明学习要求指令的基本功能二数据传送指令1通用数据传送指令2累加器专用传送指令3地址传送指令4标志寄存器传送指令5类型转换指令特点负责把数据地址或立即数传送到寄存器或存储单元中1通用数据传送指令1传送指令传送指令执行操作DSTSRC DST SRC 的类型要一致双字字节MOV AXMOV AH MOV AX MOV BXMOV MAST[BP][DI]MOV BL MOV BYTE PTR [BX]MOV DSMOV ES MOV AXMOV [BX]MOV DS例MOV EAX MOV ES 哪些指令为非法形式例MOV AXMOV AHMOV AXMOV BXMOV MAST[BP][DI]MOV BLMOV BYTE PTR [BX]MOV DSMOV ESMOV AXMOV [BX]MOV DS寄存器寄存器字寄存器寄存器字节存储器寄存器字存储器寄存器寄存器存储器字节立即数寄存器立即数存储器字节寄存器段寄存器存储器段寄存器段寄存器寄存器存储器存储器段寄存器段寄存器MOV ES立即数段寄存器MOV EAX存储器寄存器双字MOV CS AXMOV 5ALMOV EAX BX都是非法指令如为了使指令字不要过长规定双操作数指令的两个操作数中只能有一个使用存储器寻址方式因此不允许双存储器操作在有通用性MOV [BX]2带符号扩展传送指令有符号数的扩展MOVSX386及后继机型可用格式MOVSX DST, SRC执行操作本指令有两种格式REG1REG源操作数可以是或存储单元的内容目的操作数必须是功能传送时将源操作数符号扩展送入目的寄存器可以是位MOVSX3带零扩展传送指令无符号数的扩展MOVZX386及后继机型可用格式MOVZX DST, SRC执行操作本指令有两种格式REG1REG源操作数目的操作数MOVSX功能传送时将高位扩展为送入目的寄存器可以是位MOVSX例1MOVSX EAX 2MOVZX EAX 若执行前DATA =0FFE0H DATA 为字单元1EAX =0FFFFFFE0H 2EAX=0000FFE0H一般的双操作数指令源目的操作数的长度一致MOVZX MOVSX 指令的源操作数的长度一定要小于目的操作数的长度如MOVSX DXALMOVZX EBXAL 4堆栈操作指令堆栈PC 机的堆栈是在内存中开辟的一端固定一端活动的存储区采用的工作方式栈顶SP 或ESP 址由低注意 1.信息的存入和取出都是从栈顶开始中栈顶由指示当堆栈地址长度为位时堆栈操作使用SP 当堆栈地址长度为位时堆栈操作使用ESP为了将清楚堆栈操作指令我们分8086/8088803868086/8088 PUSH/POP进栈指令执行操作出栈指令执行操作例SP→SP→例SP→SP→ES)=2367H, (SP)=0100H,试画出堆栈的变化情况(SP)=100H12H12H例都是非法指令80386SP SP 2 ESP ESP 2 SP SP 4 ESP ESP 4 1616位位在实方式下803868086为编写80386及后继的程序可利用位通用寄存器可使用新增指令可采用新增的寻址方式但是段的最大长64KB 当存储单元的地址偏移超过64KB 时不会引起地址的反绕而导致段跨越异常在实方式下80386的兼容最大段为64称为位段在保护方式下段长可达4G 称为位段在实方式下运行的程序只能使用位段尽管在实方式下只能使用位段但可以使用位操作数也可以使用位形式表示的存储单元地址例MOV EAX关于实方式程序的几点说明为单位指令可以有四种格式不允许它使用立即数寻址方式指令允许三种格式能为字节类型5PUSHA/PU格式PUSHA286及后继PUSHAD386及后继执行操作PUSHA位通用寄存器依次入栈入栈次序为AX CX DX BX指令执行前的SP BP SI DISP SP-16PUSHAD位通用寄存器依次入栈入栈次序为EAX ECX EDX EBX指令执行前的ESP EBP ESI EDIESP ESP-326POPA/POP格式执行操作POPA位通用寄存器依次出栈出栈次序为DI SI BP SP BX DX CX AXSP SP+16POPAD位通用寄存器依次出栈出栈次序为EDI E SI EBP ESP EBX EDX ECX EAXESP ESP+32PUSHA POPA PUSHAD不影响标志位例例7交换交换指令执行操作OPR1OPR1OPR1例如XCHG EAX,EBX ; EAX 字AL 为要查找数据在表格2累加器专用传送指令EAX AX 传送信息IN OUT 输出程序设计中讲解换码指令格式执行操作累加器EAX AX AL例MOV BX, OFFSET TABLE ; (BX)=0040H长度不超过256)或EBX下标→(AL)3地址传送指令1LEA REG, SRC ;2LDS REG, SRC ;3LES REG, SRC ;4LFS REG, SRC ;5LGS REG, SRC ;6LSS REG, SRC ;把首地址偏移地址传送指令执行操作位有效地址位有效地址位有效地址截取低位有效地址零扩展后存入则MOV BX LEA BXBX =3412H BX=0100HBLOCK的区别假设0100H BLOCK =3412H 例值而不是该地址所在的存储单元的内容必须注意取地址到和寄存器指令执行操作或SREG ←位寄存器REG 不能是段R R LFS 段址偏移地址偏移地址段址例LDS SI, [10H]例LES DI, [BX]例TABLE DW 40H, 3000H , 2000HLSS ESP TABLE ;ESP=30000040H; (SS) =2000H4标志寄存器传送指令执行操作送标志寄存器指令执行操作(FLAGS标志进栈指令执行操作PUSHF: (SP)标志出栈指令执行操作LAHFSAHF例PUSHF TF=1TF15类型转换CBW AL的符号扩展到AH形成中的字CWD/CWDECWD AX的符号扩展到DX形成DX AX双字CWDE AX的符号扩展到EAX形成EAX双字CDQ EAX的符号扩展到EDX形成EDX EAXBSWAP 486及后继机型可用格式BSWAP R32 R32位寄存器操作将位寄存器的字节次序变反即14字节互换23字节互换指令合法的指令格式堆栈操作指令的指令与指令的区别掌握XCHG XLAT MOVSX MOVZX类型转换其余堆栈操作指令标志操作指令MOVSX作业。

华中科技大学80X86汇编语言程序的设计试卷

华中科技大学80X86汇编语言程序的设计试卷

1. SHR BH, 82. ADD [BX], -53. LEA POINT, BUF4. IN DX, 2005. PUSH DH6. MUL 257. XLAT BX, TAB8. REPNZ MOVSW9. MOV AX, 2[SI][DI] 10. MOV [BX], [SI]班级 ________________ 姓名 ______________ 号 _______________ 成绩 _______、改错题(10分,每题1分,在错误处划线,线下写上正确答案)二、单选题(20分,每题1分) 1 . MOV 指令的特点是 。

A .影响DFB .影响SFC .影响CFD .不影响标志位2 .使用寄存器间接寻址万式访问堆栈中呆变量时 ,要选用寄存器。

A . BXB . BPC . SID . SP3 . 8086标志寄存器中的三个控制标志是 __________ A . IF 、PF 、SF B . DF 、OF 、CF C .DF 、IF 、TF D . TF 、AF 、IF 4 .若有符号数运算的结果溢出,则置 ________ 为1。

A .OFB . CFC . SFD . IF5 .若某存贮器操作数的偏移地址在 SI 中,访问该操作数应采用 _________ 址方式。

A .立即B .寄存器C .寄存器冋址D . 直接6 .串操作指令中, 目的串的逻辑地址应为 OA . DS : [SI]B . DS : [DI]C . ES: [DI]D . ES: [SI]7 . 不在本模块定义而在本模块中引用的符号称 符号。

A .公共B .局部C .自定义D . 外部8 . 若(CL ) = 4 , (AX ) =0FF0FH ,执行语句 ROR AX , CL”后,(AX ) =A . 0FFFFHB . 0FFF0HC . 0F0FFHD . 0FFFH 9 .已知AL 中存放着一个压缩 BCD 码,为实现 AL 减1操作,应选用指令序列A . DEC ALB . SBB AL , 0C . SUB AL , 1D . SUB AL , 1AASDAS AASDAS10 .要将BL 中的8位数据送到 1234H 端口号的外部设备中去 ,应选用 指令序列。

8086汇编语言程序设计——第一个程序

8086汇编语言程序设计——第一个程序

8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。

Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。

汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。

学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。

⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。

假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。

D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。

1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。

伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。

⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。

汇编语⾔程序建⽴及汇编过程如图所⽰。

⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。

注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。

执⾏MASM和LINK命令时需要按多次回车。

3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
1、子程序的概念和特点
子程序:把在程序中多次出现,具有独立功能 的程序段写成程序模块,该模块可被多次调用, 称之为子程序。
特点:①可重复使用(调用) ②具有通用性(可通过入口参数实现) ③可浮动性(存放位置灵活) ④可递归性和可重入性
第6章
第六章 子程序设计
一、子程序的定义 二、子程序的结构形式
三、子程序的设计和调用 四、子程序的参数传递方法 五、子程序的嵌套和递归调用 六、子程序的设计举例 七、多模块程序设计 八、汇编语言和高级语言的混合编程
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
一、子程序的定义
1、子程序的概念和特点 2、子程序的定义 3、子程序的调用和返回
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
2、子程序的定义
子程序的定义是由过程定义伪指令PROC和ENDP 来完成的。其格式如下:
过程名 PROC [NEAR/FAR]

过程名 ENDP
其中PROC表示过程定义开始,ENDP表示过程定 义结束。过程名是过程入口地址的符号表示。
一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性。
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
3、子程序的调用和返回
❖ 调用
①段内直接调用
格式:CALL 子程序名
功能:将子程序返回地址(断点)入栈
SP←SP-2
(SP)←IP,
并转到子程序入口地址去执行子程序。
❖ 返回指令

综合性的汇编语言程序设计实验

综合性的汇编语言程序设计实验

湘潭大学实验报告课程: 80X86汇编语言程序设计实验题目:综合性的汇编语言程序设计学院:信息工程学院专业: 14级计算机科学与技术二班学号: ********** *名:**指导教师:***完成日期: 2016.5.12一、实验内容开发一个总源代码行数不低于300行(或新代码行数不少于200行)的汇编语言程序以解决一个相对独立的局部应用问题。

二、实验环境硬件环境:一台微型计算机软件环境:Window7系统、debug环境、masm三、实验代码设计DATAS SEGMENT;此处输入数据段代码STRING1 DB'0: EXIT, 1: A+B, 2: A-B, 3: A*B, 4: A/B ','$'STRING2 DB'Please enter a number to have a choice :','$'STRING3 DB'Please enter A:','$'STRING4 DB'Please enter B:','$'STRING5 DB'You have chosed the A+B','$'STRING6 DB'You have chosed the A-B','$'STRING7 DB'You have chosed the A*B','$'STRING8 DB'You have chosed the A/B','$'STRING9 DB'Thanks for using ^U^ !','$'STRING10 DB'You enter the error number ! Please enter again.','$'STRING11 DB '--------------------------------------------------------------------------','$' NUM1 DW 0NUM2 DW 0DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSHUANHANG PROC NEAR ;换行子程序可用STR_CRLF DB0AH,0DH,'$'MOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21HRETHUANHANG ENDPJIAFA PROC NEAR ;加法子程序MOV DX,NUM1CALL PRINT ;调用数据以十进制输出子程序,把NUM1以十进制形式输出MOV DL,'+'CALL STDOUT ;调用输出子程序,把+号输出MOV DX,NUM2CALL PRINTMOV DL,'=';调用输出子程序,把=号输出CALL STDOUTMOV AX,NUM1ADD AX,NUM2MOV DX,AXCALL PRINTRETJIAFA ENDPJIANFA PROC NEAR ;减法子程序MOV DX,NUM1CALL PRINTMOV DL,'-'CALL STDOUTMOV DX,NUM2CALL PRINTMOV DL,'='CALL STDOUTMOV AX,NUM1MOV BX,NUM2SUB AX,BXMOV DX,AXCALL PRINTRETJIANFA ENDPCHENGFA PROC NEAR ;乘法子程序MOV DX,NUM1CALL PRINTMOV DL,'*'CALL STDOUTMOV DX,NUM2CALL PRINTMOV DL,'='CALL STDOUTMOV AX,NUM1MOV DX,0MUL NUM2MOV DX,AXCALL PRINTRETCHENGFA ENDPCHUFA PROC NEAR ;除法子程序MOV DX,NUM1CALL PRINTMOV DL,'/'CALL STDOUTMOV DX,NUM2CALL PRINTMOV DL,'='CALL STDOUTMOV DX,0MOV AX,NUM1DIV NUM2MOV DX,AXCALL PRINTRETCHUFA ENDPPRINT PROC NEAR ;数据以十进制输出子程序PUSH DXPUSH AXPUSH CXPUSH BXMOV CX,0DO:MOV AX,DXMOV DX,0MOV BX,10DIV BXXCHG AX,DXADD AL,30HPUSH AXINC CXCMP DX,0JNZ DODO1:POP AXMOV DL,ALCALL STDOUTLOOP DO1POP BXPOP CXPOP AXPOP DXRETPRINT ENDPSTDOUT PROC NEAR ;输出子程序MOV AH,2INT 21HRETSTDOUT ENDPSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码ONEAGAIN:;输入选择继续执行程序XOR AX,AXXOR BX,BXMOV NUM1,0;很重要的两步MOV NUM2,0;CALL HUANHANGCALL HUANHANGLEA DX,STRING11MOV AH,9INT 21HCALL HUANHANGLEA DX,STRING1 ;显示菜单MOV AH,9INT 21HCALL HUANHANGCALL HUANHANGLEA DX,STRING2 ;提示菜单的选择MOV AH,9INT 21HCALL HUANHANGCALL HUANHANGMOV AH,1 ;输入选择INT 21H;菜单选择。

IBM—PC(80x86)汇编语言与接口技术-第8章 输入输出程序设计

IBM—PC(80x86)汇编语言与接口技术-第8章 输入输出程序设计

8259A
76 5 4
中断屏蔽寄存器21H
打 印 机
3210
IN AL, 21H AND AL,0FDH
键定 时
盘器
OUT 21H,AL
76 5 4
中断命令寄存器20H
EOI
3 2 1 0 MOV AL, 20H OUT 20H, AL
11
中断向量表
00000 类型0的(IP) 类型0的(CS)
00004 类型1的(IP) 类型1的(CS)
speaker_on endp
speaker_off proc push ax in al, 61h and al, 0fch out 61h, al pop ax ret
speaker_off endp
end
8
3. 中断传送方式
中断源:引起中断的事件
外中断(硬中断):
外设的 I/O 请求 —— 可屏蔽中断 电源掉电 / 奇偶错 —— 非屏蔽中断
15
例:用 DOS 功能调用存取中断向量
MOV AL, N
MOV AH, 35H
INT 21H
PUSH BX
; 保存原中断向量
PUSH DS
MOV AX, SEG INTHAND
MOV DS, AX
MOV DX, OFFSET INTHAND
MOV AL, N
MOV AH, 25H
08 系统定时器 09 键盘 0A 彩色/图形接口 0B 保留 0C 串行通讯口 0D 保留 0E 软盘 0F 打印机
10
中断的条件:
设置CPU中断允许位:
FLAGS 中的 IF 位 = 1 允许中断 ( STI ) = 0 禁止中断 ( CLI )

汇编语言程序设计第3章

汇编语言程序设计第3章
15 CS DS SS ES FS GS 0 代码段寄存器 数据段寄存器 堆栈段寄存器 附加段寄存器 附加段寄存器 附加段寄存器
3.;<<
3.1 寄存器体系结构
1. 标志寄存器(FLAGS) 标志寄存器( ) 标志寄存器又称为程序状态字寄存器( 标志寄存器又称为程序状态字寄存器(PSW,Program , Status Word),它用来标识当前处理器的运行状态。 ),它用来标识当前处理器的运行状态 ),它用来标识当前处理器的运行状态。 (1)条件标志 ) (2)控制标志 ) 2. 指令指针寄存器
3.1.3 专用寄存器
北京科海电子出版社 · <<<
3.2 存储器的管理模式
1. 存储单元 计算机是用二进制数表示信息的, 计算机是用二进制数表示信息的,信息 的基本单位是一个二进制位, 位二进制数组 的基本单位是一个二进制位,8位二进制数组 成一个字节, 成一个字节,内存储器按字节组织排列成一 个个存储单元,其位编号如图所示。 个个存储单元,其位编号如图所示。 2. 存储单元的地址 3. 存储单元的内容
北京科海电子出版社 · <<<
3.1 寄存器体系结构
通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算, 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存 运算结果。如图所示。 运算结果。如图所示。 从图中看到8个 位的通用寄存 从图中看到 个32位的通用寄存 器,分别为EAX、EBX、ECX、 分别为 、 、 、 EDX、ESI、EDI、EBP和ESP。 、 、 、 和 。 这些寄存器的低16位可直接作为 这些寄存器的低 位可直接作为
3.2.2 存储器的分段
北京科海电子出版社 · <<<

80x86微机原理参考答案

80x86微机原理参考答案

80x86微机原理参考答案第一章计算机基础(P32)1-1电子管,晶体管,中小规模集成电路、大规模、超大规模集成电路。

1-2把CPU和一组称为寄存器(Registers)的特殊存储器集成在一片大规模集成电路或超大规模集成电路封装之中,这个器件才被称为微处理器。

以微处理器为核心,配上由大规模集成电路制作的只读存储器(ROM)、读写存储器(RAM)、输入/输出、接口电路及系统总线等所组成的计算机,称为微型计算机。

微型计算机系统是微型计算机配置相应的系统软件,应用软件及外部设备等.1-3写出下列机器数的真值:(1)01101110 (2)10001101(3)01011001 (4)11001110答案:(1)+110 (2)-13(原码) -114(反码)-115(补码)(3)+89 (4)-78(原码)-49(反码)-50(补码)1-4写出下列二进制数的原码、反码和补码(设字长为8位):(1)+010111 (2)+101011(3)-101000 (4)-111111答案:(1)[x]原=00010111 [x]反= 00010111 [x]补= 00010111(2)[x]原=00101011 [x]反= 00101011 [x]补= 00101011(3)[x]原=10101000 [x]反= 11010111 [x]补= 11011000(4)[x]原=10111111 [x]反= 11000000 [x]补=110000011-5 当下列各二进制数分别代表原码,反码,和补码时,其等效的十进制数值为多少?(1)00001110 表示原码14,反码14,表示补码为14(2)11111111 表示原码-127,反码-0,表示补码为-1(3)10000000 表示原码-0,反码-127,表示补码为-128(4)10000001 表示原码-1,反码-126,表示补码为-1271-6 已知x1=+0010100,y1=+0100001,x2=-0010100,y2=-0100001,试计算下列各式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADD AX, ES: [BX+200H] ;访问附加数据段,从[BX+200H] 取一字与AX相加 -> AX
3.1 寻址方式与指令格式
3.1.2 寻址方式 1. 操作数寻址
(3)存储器寻址(Memory Addressing) (d)变址寻址(Indexed Addressing) MOV AL, [CX*2+10H] ; 访问数据段
设32位的目的操作数存放在DX和AX中,DX存放高位字,
32位源操作数存放在BX和CX中,BX存放高位字
CF
ADC
ADD
DX
AX
+ BX
CX
DX
AX指令序列为: ADD NhomakorabeaX, CX ;低位加 ADC DX, BX ;高位加
ADC指令示例——双字加法:
执行前(DX)=0418H, (AX)=0F365H (BX)=1005H, (CX)=0E024H
MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21H CODES ENDS END START
3.2.2 汇编语言程序上机过程
步骤2 利用masm.exe将源程序(*.asm)汇编为目标文件(*.obj);
第3章 80x86汇编语言程序设计
3.0 汇编语言
3.0.1 基本概念 1. 机器码(Machine Code)
以二进制代码形式表示的计算机能执行的指令
2. 汇编语言( Assembly Language)
用于助记机器码,与机器指令一一对应
汇编源程序 (汇编语言)
汇编程序 (Assembler)
目标程序 (机器语言)
3.1 寻址方式与指令格式
3.1.1 指令格式
操作码 操作数

操作数
指令 = 操作码(Opcode) + 操作数(Operand)
其中操作数可以是操作数本身或操作数地址
目的操作数
如:MOV AX, 1234H
源操作数
操作码
操作数
3.1 寻址方式与指令格式
3.1.2 寻址方式 1. 操作数寻址
(1)立即寻址(Immediate Addressing)
MOV BL, [BP] ;访问堆栈段,取BP间址 -> BL
3.1 寻址方式与指令格式
3.1.2 寻址方式 1. 操作数寻址
(3)存储器寻址(Memory Addressing) (c)基址寻址(Based Addressing)
MOV BL, 10H[BP] ;访问堆栈段,从[BP+10H]单元取一字节 -> BL
MOV DX, 03FCH
IN AX, DX ;从03FCH端口读入字数据-->AX
OUT指令示例
OUT 32H, AX ;传送字数据到32H端口
MOV DX,400H
MOV AL, 86H
OUT DX, AL ;传送字节数据到DX指出的端口
3.1 寻址方式与指令格式
3.1.2 寻址方式 1. 操作数寻址
MOV AH, 9 INT 21H MOV AH, 4CH INT 21H
;字符串显示子功能 ;系统调用软中断 ;返回DOS ;系统调用软中断
CODES ENDS END START
;代码段定义结束
汇编语言程序设计举例 好好学习,天天向上!
ADD指令示例1:
ADD DX, BX 设(DX)=4652H, (BX)=0F0F0H
调试
debug
调 试
DOS下执行 执行
22
3.2.2 汇编语言程序上机过程
步骤1 用编辑软件编辑源程序并保存为*.asm;
DATAS SEGMENT STRING DB 'Hello world!',0AH,0DH,'$' DATAS ENDS
CODES SEGMENT ASSUME CS:CODES,DS:DATAS START:
IN AL, 20H OUT 60H, AX
;从20H端口读入1个字节 -> AL ; 将AX中1个字(word)送到60H和61H端口
* 使用1字节立即数,I/O端口寻址范围00H~FFH,最多为256个。
IN指令示例 IN AL, 20H
;从20H端口读入字节数据-->AL
IN AX, 48H ;从48H端口读入字数据-->AX
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA MOV DS, AX ; 段寄存器赋值
MOV AL, BUF1
ADD AL, BUF2
MOV SUM, AL
MOV AH, 4CH
INT 21H
; 程序退出
CODE ENDS
END START
21
3.2.2 汇编语言程序上机过程 源程序 汇编 目标程序 连接 可执行程序 .asm masm .obj link .exe
MOV BL, SS:[10H] ; 取出SS堆栈段有效地址为10H字节单元的内容->BL
3.1 寻址方式与指令格式
3.1.2 寻址方式 1. 操作数寻址
(3)存储器寻址(Memory Addressing) (b)寄存器间接寻址(Register Indirect Addressing)
MOV AX, [SI] ; 访问数据段,取SI间址 -> AX
2、循环移位指令:ROL——循环左移 ROR——循环右移 RCL——带进位循环左移 RCR——带进位循环右移
SHL/SAL
CF bn
逻辑/算术左移
b0 0
SHR 逻辑右移
0
bn
bn SAR 算术右移
b0 CF b0 CF
34
ROL
CF
循环左移
RCL
CF
带进位循
环左移
CF ROR 循环右移
RCR
CF
(4)端口寻址(I/O Port Addressing) (b)间接寻址(I/O Port Indirect Addressing)
MOV DX, 3FCH IN AL, DX
; 从3FCH端口读入1个字节
• 由DX寄存器间接给出I/O端口地址,为16位,最多可寻址 64KB个端口
压栈指令示例 PUSH AX 执行前 AX 3125H
低地址
SP
52500H
AX 3125H
执行后 低地址
25H 524FEH
31H 524FFH
SP
52500H
进栈方向
15
出栈指令示例 POP BX 执行前 BX 75C1H
低地址
SP 6BH 51000H
48H
1H
9AH
2H
28H
3H
执行后 BX
48H 6BH
低地址
SP 6BH 51000H
48H
0100 0110 0101 0010 + 1111 0000 1111 0000 1 0011 0111 0100 0010
进位
4652H + F0F0H 1 3742H
进位
执行后 (DX)=3742H
ZF=0 结果不为0 SF=0 结果为正 CF=1 有进位 OF=0 不溢出
ADD指令示例2:
子程序嵌套
程序设计中,子程序A调用子程序B,子程序B 调用子程序C......这一过程称为子程序嵌套。
CALL
CALL
CALL
主程序
RET 子程序1
RET 子程序2
RET 子程序N
注意: 1、每一层调用都要注意寄存器的保存和恢复 2、PUSH ,POP 的使用要严格平衡,确保自内向外顺序退出
19
3.2 80x86汇编语言程序上机过程
MOV AL, 8
; 执行后,(AL) = 8
MOV AX, 1234H
; 执行后,(AX) = 1234H
MOV AX, 0FFFFH
*立即数必须以数字开头,以字母开头的十六进制数需加0前缀。
3.1 寻址方式与指令格式
3.1.2 寻址方式 1. 操作数寻址
(2)寄存器寻址(Register Addressing)
带进位循
环右移
35
移位指令示例1 MOV CL, 5 SAR AL, CL 执行前 AL 0011110000000000 (60H=96) 执行后 AL 0000000000001111 (03H=3) 通常:算术右移N位相当于有符号数除以2N(有例外) 逻辑右移N位相当于无符号数除以2N 算术/逻辑左移N位相当于无符号数乘以2N
1H
9AH
2H
28H
3H
出栈方向
16
POP指令注意事项:
POP 指令不允许使用立即数寻址方式, 不允许使用CS寄存器 例如: POP 12 ;不合法
POP CS ;不合法
子程序的调用和返回
主程序
. . . CALL SUB (断点)
. .
子程序
SUB PROC . . . . . . .
RET
18
ADD WORD PTR[BX], 9F76H 设(DS)=2000H, (BX)=1000H 执行前:
21000 88H
A988H
A9H
+ 9F76H
1 48FEH
执行后:
进位
21000 FEH 48H
30
CF=1 有进位 OF=1 溢出 ZF=0 结果不为0 SF=0 结果为正
ADC指令示例——双字加法:
移位指令示例2 设(AX)=0012H, (BX)=0034H, 要求装配成(AX) = 1234H MOV CL, 8 ROL AX, CL ADD AX, BX
相关文档
最新文档