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,试计算下列各式。

计算机等级考试(国家)-80x86微处理器与汇编语言程序设计模拟1

计算机等级考试(国家)-80x86微处理器与汇编语言程序设计模拟1

80x86微处理器与汇编语言程序设计模拟1一、选择题1、下列______不是80386所具有的特点。

A. 保护虚地址存储方式,扩充了通用寄存器的功能B. 32位的运算能力C. 程序中可同时使用四个数据段D. 采用了PCI标准的局部总线2、在普通的微处理芯片中,主要有CISC和RISC两种不同的体系结构。

80386的体系结构为______。

A. CISC结构B. 融合了CISC结构和RISC结构C. RISC结构D. 不具有上述两种结构3、下述______不是奔腾处理器Pentium与80386相比所具有的新特点。

A. 错误检测及功能冗余校验技术B. 增强的64位数据总线C. 保护虚地址存储方式,扩充了通用寄存器的功能D. 采用了PCI标准的局部总线4、Pentium4微处理器进行存储操作时,在时钟周期T1期间,完成______操作。

A. W/R信号变为高电平B. 发送存储器地址C. 读操作码D. 读操作数5、Pentium微处理器的内部数据总线宽度是______。

A. 16位B. 32位C. 36位D. 64位6、Pentium微处理器中共有几个段寄存器?______。

A. 4个B. 5个C. 6个D. 7个7、Pendum4微处理器可寻址的最大存储空间是______。

A. 256MBB. 4GBC. 64GBD. 64TB8、假设Pentium微处理器的段描述符中基地址是00280000H,段的界限是00010H,粒度G=1,则该描述符所寻址的结束地址是______。

A. 00280010HB. 00290000HC. 0028000FHD. 00370000H9、执行下列指令后,(CL)=______。

STR1 DW 'AB'STR2 DB 16DUP(?)CNT EQU $-STR1MOV CX,CNTMOV AX,STR1HLTA. 10HB. 0EHC. 12HD. 0FH10、上题执行后(AX)=______。

汇编语言程序设计_第3章 80x86指令系统

汇编语言程序设计_第3章 80x86指令系统

3.3.2 算术指令
1. 加法
一般形式:
ADD dest, src ; dest = dest + src
ADC dest, src ; dest = dest + src + CF
INC
dest
; dest = dest + 1
语法格式:
ADD reg/mem, reg/mem/imm
ADC reg/mem, reg/mem/imm
movsx ax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al ; 等价于顺序执行cbw与cwde
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
(3)MOVZX 一般形式: MOVZX dest, src ; src零扩展为dest;386新增 语法格式: MOVZX reg16, reg8/mem8 MOVZX reg32, reg8/mem8/reg16/mem16
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
5. 堆栈操作指令
80x86系统的堆栈具有如下特点: 堆栈是在内存的堆栈段中,具有“先进后出”的特点。 堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单
元。 堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地
INC
reg/mem
对标志位的影响:
ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。
2019/8/26

汇编语言程序设计复习

汇编语言程序设计复习

知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。

十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。

8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。

第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。

(2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。

存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。

eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。

已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。

如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。

数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。

80x86汇编语言程序设计

80x86汇编语言程序设计

80x86汇编语言程序设计80x86汇编语言程序设计是一门专门研究如何使用汇编语言在80x86架构的计算机上编写程序的学科。

80x86架构是Intel公司开发的一种微处理器架构,它包括了8086、80286、80386、80486等处理器,以及后来的Pentium系列。

汇编语言是一种低级语言,它与机器语言非常接近,通常用于编写性能要求极高的程序或者进行底层系统开发。

汇编语言基础汇编语言的指令与机器指令一一对应,但使用助记符来代替二进制代码,使得程序更加易于编写和理解。

汇编语言的基本元素包括指令、寄存器、内存地址和立即数。

- 指令:是汇编语言的基本操作单位,用于执行特定的操作,如数据传输、算术运算、逻辑运算等。

- 寄存器:是CPU内部的存储单元,用于快速存取数据。

80x86架构有多个寄存器,包括通用寄存器、段寄存器、指令指针寄存器等。

- 内存地址:是存储在RAM中的数据的位置,汇编语言可以通过内存地址访问和操作数据。

- 立即数:是指令中直接给出的数值,不需要通过寄存器或内存地址访问。

汇编语言指令80x86汇编语言提供了丰富的指令集,用于执行各种操作。

以下是一些基本的指令类型:- 数据传输指令:如MOV(移动数据)、PUSH(将数据压入堆栈)、POP(从堆栈中弹出数据)等。

- 算术指令:如ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等。

- 逻辑指令:如AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR (逻辑异或)等。

- 控制流指令:如JMP(无条件跳转)、JE(等于时跳转)、JNE(不等于时跳转)、LOOP(循环)等。

汇编程序结构一个典型的汇编程序包括以下部分:1. 程序声明:声明程序的名称和起始点。

2. 数据定义:定义程序中使用的数据和常量。

3. 代码段:包含程序的指令和逻辑。

4. 堆栈段:用于存储临时数据和调用函数时的参数。

5. 常量段:定义程序中使用的常量。

6. 外部引用:引用其他程序或库中的代码和数据。

第二章 80x86计算机组织

第二章  80x86计算机组织

80x86汇编语言程序设计
1. 状态标志取值的一般规则
ZF(Zero Flag):零标志。若运算结果为0,则ZF = 1,否则 ZF = 0。
SF(Sign Flag):符号标志。若运算结果为负数,则SF = 1, 否则SF = 0。 CF(Carry Flag):进位标志。若加法时结果最高位向前有进 位或减法时最高位向前有借位,则CF = 1,否则CF = 0。 OF(Overflow Flag):溢出标志。若带符号数的运算结果超 出了补码表示的范围,则OF = 1,否则OF = 0。 AF(Auxiliary Carry Flag):辅助进位标志。若加法时结果 低4位向前有进位或减法时结果低4位向前有借位,则AF = 1,否 则AF = 0。 PF(Parity Flag):奇偶标志。若结果最低字节中1的个数为 偶数,则PF = 1,否则PF = 0。
80x86程序可以存取的最小数据单位是字节。例如,若要读取的位 数不足8位,则只能先读出一个完整字节,再屏蔽掉其它位。
字的存储采取“低字节在低地址,高字节在高地址,字的地址由低 地址表示”的小端方式,双字也类似。
要正确理解内存单元的地址和值,地址表示位置,值是相应位置处 的内容。同一地址既可以看作字节单元地址,也可以看作字甚至双字 单元地址,取决于具体的使用方式。
2013-1-20
80x86汇编语言程序设计
80x86 CPU有3种工作模式:实模式、保护模式和虚拟8086模 式。 在实模式下,段地址和偏移地址均为16位。20位物理地址由 16位段地址左移4位加16位偏移地址得到,只能寻址1MB的内存 空间,且每段≤64KB。 在实模式下,32位CPU下的程序可以使用32位寄存器和32位操 作数,但采用32位寄存器表示偏移地址时,只使用低16位,高 16位为0。CS:IP总是指向下一条要执行的指令,EIP的高16位为 0。SS:SP指向堆栈段的栈顶,ESP的高16位为0。 状态标志是CPU进行条件判断和控制程序执行流程的依据,最 常用的是4个:CF、OF、SF和ZF。其中,CF表示无符号溢出,OF 表示带符号溢出。

汇编语言程序设计-80X86指令系统和寻址方式

汇编语言程序设计-80X86指令系统和寻址方式

1.数据传送类指令 • 数据传送类指令用于实现CPU的内部寄存器之间 • CPU内部寄存器和存储器之间 • CPU累加器AX或AL和I/O端口之间的数据传送 此类指令除了SAHF和POPF指令外均不影响标志寄存器的
内容。 在数据传送指令中,源操作数和目的操作数的数据长度
必须一致。
(1)MOV指令
指令功能:把AX中的16位数或AL中的8位数输出到指定端口。
例 3.26
OUT 22H, AL
(4)段间间接寻址方式 这种寻址方式是由指令中给出的存储器数据寻址方式,包括存
放转移地址的偏移量和段地址。其低位字地址单元存放的 是偏移地址,高位字地址单元中存放的是转移段基值。这 样既更新了IP内容又更新了CS的内容,故称为段间间接寻 址。 例 JMP WORD PTR[BX] ;转移到当前代码位置内 ;有效地址存放在BX寻址的单元中
;物理地址=DS×16+SI
MOV [DI], DX
;物理地址=DS×16+DI
2) 以BP进行寄存器间接寻址(BP作为地址指针)的方式
隐含的段寄存器为堆栈段寄存器SS,操作数存放在堆栈段区域, 将堆栈段寄存器SS的内容左移4位,再加上基址寄存器BP的 内容,即为操作数的物理地址。

MOV [BP], BX
OP
DW
OP
SW
操作码格式
8086指令格式
几点说明: ① 一条指令可以包含一个操作数,也可以包含一个以上的操作
数;一个操作数的指令称为单操作数指令,单操作数指令中 的操作数可能由指令本身提供,也可能由指令隐含地指出。 ② 若位移量或立即数为16位,那么在指令代码中,将低位字节 放在前面,高位字节放在后面。 ③ 8086指令系统中大多数指令的操作码只占用第一个字节,但 有几条指令是特殊的,其指令中的第一个字节不但包含操作 码成分,而且还隐含地指出了寄存器名,从而整个指令只占 一个字节,成为单字节指令。这些指令字节数最少,执行速 度最快,用得也最频繁。

实验一 汇编语言程序设计EMU8086基础实验

实验一  汇编语言程序设计EMU8086基础实验

实验一汇编语言程序设计EMU8086基础实验1、实验目的和要求:了解使用EMU8086(8086汇编模拟工具)学习汇编的方法。

2、实验内容:编写汇编程序,计算2010H+2011H,并把和存入RESULT单元。

8086汇编模拟工具,结合了一个先进的原始编辑器、汇编器、反汇编器、具除错功能的软体模拟工具(虚拟 PC),还有一个循序渐进的指导工具。

这对刚开始学汇编语言的人会是一个很有用的工具。

它会在模拟器中一步一步的编译程式码并执行,视觉化的工作环境让它更容易使用。

你可以在程式执行当中检视暂存器、标志以及内存。

模拟器会在虚拟 PC 中执行程式,这可以隔绝你的程式,避免它去存取实际硬体,像硬盘、内存,而在虚拟机器上执行汇编程序,这可以让除错变得更加容易。

3、实验仪器与器材:计算机及EMU8086汇编软件等。

4、实验原理:自己总结5、实验过程与测试数据(含电路图/程序框图):A、打开EMU8086 v4.08软件,新建工程,选EXE模板,清屏,编写8086程序代码。

B、保存程序代码为*.asm文件,编译保存为可执行文件.exe,编译保存没有错误则模拟运行。

如果有错误返回修改。

运行有单步运行、全速运行等。

实验一参考程序DATA SEGMENTX DW 2010HY DW 2011HRESULT DW ?DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,XADD AX,YMOV RESULT,AXRETMAIN ENDPCODE ENDSEND START6、实验分析:自己分析7、实验体会自己总结。

80X86汇编语言程序设计教程+课后习题答案(清华大学版)

80X86汇编语言程序设计教程+课后习题答案(清华大学版)

80X86汇编语言程序设计教程+课后习题答案(清华大学版)第二章答案tarzan版题2.18086/8088通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门用途?哪些寄存器可以做为存储器串行方式的指针寄存器?请问:8086/8088通用寄存器的通用性整体表现在:这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果;8个通用寄存器的专门用途如下:ax字乘法,字除法,字i/obx存储器指针cx串成操作方式或循环掌控中的计数器dx字乘法,字乘法,间接i/osi存储器指针(串成操作方式中的源指针)di存储器指针(串成操作方式中的目的指针)bp存储器指针(读取堆栈的指针)sp堆栈指针其中bx,si,di,bp可作为存储器寻址方式的指针寄存器题2.2从程序员的角度,8086/8088存有多少个可以出访的16十一位寄存器?存有多少个可以出访的8十一位寄存器?请问:从程序员的角度,8086/8088存有14个可以出访的16十一位寄存器;存有8个可以出访的8十一位寄存器;题2.3寄存器ax与寄存器ah和al的关系如何?请写出如下程序片段中每条指令执行后寄存器ax的内容:movax,1234hmoval,98hmovah,76haddal,81hsubal,35haddal,ahadcah,aladdax,0d2hsubax,0ffh请问:movax,1234hax=1234hmoval,98hax=1298hmovah,76hax=7698haddal,81hax=7619hsubal,35 hax=76e4haddal,ahax=765ahadcah,alax=d15ahaddax,0d2hax=d22chsubax,0ffhax=d12dh题2.48086/8088标志寄存器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志的状态?答:8086/8088标志寄存器中定义了9个标志,如下:cf:carryflagzf:zeroflagsf:signflagof:overflowflagpf:parityflagaf:auxiliarycarryflagdf:directionflagif:interrupt-enableflagtf:trapflag这些标志可分为两类,分别为:1、运算结果标志;2、状态控制标志;使用指令sahf可以把ah中的选定位送至标志寄存器高8十一位sf、zf、af、pf、cf;使用clc可以去除cf,复置cf至0使用stc弯叶cf至1使用cld弯叶df至0使用std弯叶df至1使用cli弯叶if至0采用sti可置if到1另外,在某些指令继续执行过程中可以发生改变部分标志的状态;题2.5恳请说道说道标志cf和标志of的差异。

80X86汇编语言程序设计 实验报告3

80X86汇编语言程序设计 实验报告3

80X86汇编语言程序设计实验报告专业:班级:日期:成绩:第三次试验指导老师:学生姓名:学号:一、实验目的(1) 加深对一些常用的汇编指令的理解;(2) 掌握基本的程序设计方法;(3) 进一步熟悉TD的使用。

二、实验内容1、《80X86汇编语言程序设计》教材中 P96的 3.11 题。

(1)请事先指出程序运行结束后,显示器显示的内容。

(2)若将NUM的定义改成如下形式:NUM DB 35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUM DB 59显示的结果是什么?(4)若将NUM的定义改成如下形式:NUM DB 75显示的结果是什么?(5)修改该程序,使之能够以16进制形式显示NUM单元中的内容。

2、设在一个缓冲区BUF1中存放了一个串“123GOOD”, 将其以相反顺序拷贝到另一个缓冲区BUF2中。

(用TD观察程序执行前后的数据区,并记录下来)3、输入一个十进制数字串(假定是无符号的),以四位十六进制的形式输出该串对应的值。

例如:Input: 123↙Output: 007BH要求:(1) 画出程序流程图,给出寄存器、存储单元的分配方法;(2) 给出完整的程序清单,有必要的注释。

三、实验步骤及结果1、(1)、程序运行完之后,得到的结果为:(NUM)=39H。

(2)、程序运行完之后,得到的结果为:(NUM)=23H。

(3)、程序运行完之后,得到的结果为:(NUM)=3;H。

(4)、程序运行完之后,得到的结果为:(NUM)=4;H。

(5)、修改后的程序段如下:C1 SEGMENT USE16 ASSUME DS:A1, SS:B1, CS:C1 BEGIN: MOV AX,A1MOV DS,AXLEA DI,BUF0MOV AL,NUMSHR AL,4CMP AL,0AHJAE L1OR AL,30HMOV [DI],ALL2: INC DIMOV AL,NUMAND AL,0FHCMP AL,0AHJAE L3OR AL,30HMOV [DI],ALL4: INC DIMOV BYTE PTR [DI],'H'INC DIMOV BYTE PTR [DI],'$'LEA DX,BUFMOV AH,9INT 21HMOV AH,4CHINT 21HL1: MOV BYTE PTR [DI],'0'INC DISUB AL,0AHADD AL,'A'MOV [DI],ALJMP L2L3: SUB AL,0AHADD AL,'A'MOV [DI],ALJMP L4C1 ENDSEND BEGIN运行后的结果如下:①、当NUM为35时:②、当NUM为59时:③、当NUM为75时:④、当NUM为0ACH时:2、编写的程序如下:.386DATA SEGMENT USE16BUF1 DB '123GOOD$'BUF2 DB 0DATA ENDSSTACK SEGMENT USE16 STACK STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV DI,OFFSET BUF1MOV BX,OFFSET BUF2MOV CL,[BX]LOPA: MOV DL,[DI]CMP DL,'$'JE L1INC DIJMP LOPAL1: CMP DI,0JE EXITDEC DIMOV DL,[DI]MOV CL,DLMOV [BX],CLINC BXJMP L1EXIT: MOV CL,'$'MOV [BX],CLLEA DX,BUF2MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START运行后的结果如下:运行程序前数据区显示为:运行程序后数据区显示为:3、①、画出流程图如下:开始输入一个数字串将输入的数字串转化为10进制数存储。

《80x86汇编语言程序设计》(第2版)习题答案

《80x86汇编语言程序设计》(第2版)习题答案

习题参考答案1第1章1-1汇编的主要功能:输入:汇编语言源文件输出:目标文件处理:对源文件进行语法检查;将符号指令翻译为机器指令。

连接的主要功能:输入:1个或多个目标文件与库文件输出:可执行文件处理:浮动地址的重定位;多模块的连接。

1-2 (1)2EH (2)0D2H (3)0FFH(4)80H (5)7FH (6)0FEH1-3 (1)7FH (2)0FF80H (3)0FFFFH285286(4)0FFD2H (5)8000H (6)0FFH1-4 无符号数范围:0~2n-1;带符号数范围:-2n−1~2n−1-11-5 (1)压缩BCD码:58H;非压缩BCD码:x5x8H。

(2)压缩BCD码:1624H;非压缩BCD码:x1x6x2x4H。

1-6 (1)字符'1'的ASCII码;十进制数31的压缩BCD码;十进制数1的非压缩BCD码;十进制数49的十六进制表示。

(2)十进制数-1的8位二进制补码表示;带符号数255的16位二进制补码表示;无符号数255的8位二进制形式。

(3)十进制数-1的16位二进制补码表示;带符号数65535的32位二进制补码表示;无符号数65535的16位二进制形式。

1-7 (1)作为无符号数为159,等值的16位和32位形式均为9FH;作为带符号数为-97,等值的16位和32位形式分别为0FF9FH与0FFFFFF9FH。

(2)作为无符号数和带符号数均为104,等值的16位和32位形式均为68H。

(3)作为无符号数为192,等值的16位和32位形式均为0C0H;作为带符号数为-64,等值的16位和32位形式分别为0FFC0H与0FFFFFFC0H。

1-8 (1)AND 0FH (2)OR 30H(3)右移4位可得高位的值;将原值AND 0FH可得低位的值。

(4)XOR 00101010B(5)AND 8000H,若结果为0,则是正数,否则为负数。

第2章2-1 系统总线是CPU与内存和I/O子系统之间进行数据交换的通道,包括数据总线、地址总线和控制总线,分别负责在CPU与内存和I/O子系统之间传送数据、地址和控制信息。

第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令

第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令

DI,200H CX,128 AX,AX STOSW
当然也可以用字节填充 可以使用重复前缀。 当寄存器AL、AX中的数不变 BBB: CLD LEA DI,0500H 时,使用重复前缀,则是对 某一RAM区域进行填充。 MOV CX,256 例如上电复位后,对某一块内 XOR AL,AL 存区域全部填充0 REP STOSB
GLUT_C 2013-08 25
④ 段间直接转移
格式: JMP FAR PTR dst 功能:用dst给出的段内偏移量代替IP,用dst的段地址代替 CS的内容,转移到新的CS: 偏移地址去执行下一条指令。 注意:在汇编语言程序设计中,dst通常使用符号地址。
例如:
MOV JMP AX, [SI] FAR PTR ABCD
GLUT_C
2013-08
8
例:比较1000:0e00H与1000:0400H连续8字节是否相等,只要有 一个不相同的字节,则设置AL=0A5H表示两个字符串不想等,否 则赋值AL=00H。
CMP_S: MOV MOV MOV MOV MOV CLD MOV REPZ JNZ MOV JMP DONE: MOV CMP_END: RET
8086指令系统(续)
GLUT_C
2013-08
1
2.3.5
串操作指令
串操作指令在教材P.128 字符串传送指令 字符串比较指令 字符串检索指令 取字符串指令 存字符串指令
GLUT_C
2013-08
2
1.字符串传送指令 字符串传送指令MOVSB/MOVSW 格式: MOVSB ;用于字节传送 MOVSW ;用于字传送。 特点: ( 1 ) MOVSB 、 MOVSW 指令,源数据串的默认段 基址 DS ,有效地址为 SI ,目的串段基址 ES ,有效 地址DI。 (2)指令前面常加重复前缀REP,重复执行n次。 (3)重复执行次数 由CX指定 (4)每次传送,DI,SI自动修改(字节传送±1,字 传送±2),加减由方向控制为DF确定。
  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
相关文档
最新文档