第二章汇编语言与汇编程序 §2.1机器语言与汇编语言 机器语言机器只能识别二进制编码 机器指令——机器能直接执行的一组二进制代码 (命令)—该二进制代码称为机器码( Machine Code) 如:40H→ INC AX01D8H→ ADD AX,BX 指令通常由两部分组成:操作码和操作数 操作码——该指令的功能,即执行什么操作。 ·操作数——指令操作对象,指明参加操作的数或 操作数的地址
第二章 汇编语言与汇编程序 § 2.1 机器语言与汇编语言 一.机器语言——机器只能识别二进制编码 • 机器指令——机器能直接执行的一组二进制代码 (命令)——该二进制代码称为机器码(Machine Code). 如: 40H→INC AX 01D8H→ADD AX,BX • 指令通常由两部分组成:操作码和操作数 • 操作码——该指令的功能,即执行什么操作。 • 操作数——指令操作对象,指明参加操作的数或 操作数的地址
机器指令的集合→机器语言→用机器语 编写的程序 →机器语言程序
• 机器指令的集合→机器语言→用机器语 言编写的程序 →机器语言程序
二、汇编语言 机器语言编写程序烦琐,难记忆,不易理解 易出错。用一些助记符来表示指令的操作码, 操作数亦用一些符号来表示→符号指令 如上:40H→ INC AX01D8H> ADDAX,BX 符号指令与机器指令一一对应。 符号指令的集合→符号语言,又称汇编语言→用汇编语 言编写的程序→汇编语言程序→不能由计算机直接执行, 必须将它翻译成机器语言程序→翻译过程称汇编→翻译 程序为汇编程序。 汇编语言源程序→汇编→目标程序
二、汇编语言 机器语言编写程序烦琐,难记忆,不易理解, 易出错。用一些助记符来表示指令的操作码, 操作数亦用一些符号来表示→符号指令。 如上:40H→INC AX 01D8H→ADD AX, BX • 符号指令与机器指令一一对应。 • 符号指令的集合→符号语言,又称汇编语言→用汇编语 言编写的程序→汇编语言程序→不能由计算机直接执行, 必须将它翻译成机器语言程序→翻译过程称汇编→翻译 程序为汇编程序。 • 汇编语言源程序 → 汇编 → 目标程序
、宏汇编程序→MASM 允许把一串指令定义为一条宏指令,有宏汇编功能。 如MASM→系统程序。宏汇编语言有三类基本指令:符号 指令,伪指令,宏指令
三、宏汇编程序→MASM 允许把一串指令定义为一条宏指令,有宏汇编功能。 如MASM→系统程序。宏汇编语言有三类基本指令:符号 指令,伪指令,宏指令
§22常用伪指令与常用算符 每一种计算机语言都规定了自己的符号系 统及语法规则。汇编语言也是如此,除符号 指令外,还必须正确使用各种符号。汇编中 的各种符号由伪指令定义,或为汇编的保留
§2.2 常用伪指令与常用算符 • 每一种计算机语言都规定了自己的符号系 统及语法规则。汇编语言也是如此,除符号 指令外,还必须正确使用各种符号。汇编中 的各种符号由伪指令定义,或为汇编的保留 字
汇编语言源程序结构—单模块程序 结构 参见教材P、60 般程序由三个段组成。教材中程序的小写字 母部分均为程序结构
一、汇编语言源程序结构——单模块程序 结构 • 参见教材P、60 一般 程序由三个段组成。教材中程序的小写字 母部分均为程序结构
STACK SEGMENT STACK 定义堆栈段及堆栈长度 DW 32 DUP(?) STACK ENDS DATA SEGMENT 定义数据段 DATA ENDS 定义代码段 CODE SEGMENT 将汇编源程序视为DOS下的子程序 BEGIN PROC FAR asSUME CS: CODE, SS: STACK, DS: DATA PUSH DS SUB AX, AX 将程序段前缀PSP进栈 PUSH AX MOV AX, DATA 设置用户数据段 MOV DS, AX RET 返回到PSP,执行PSP中的第一条指令 BEGIN ENDP INT20H,结束程序返回调用程序 CODE ENDS END BEGIN
STACK SEGMENT STACK DW 32 DUP(?) STACK ENDS DATA SEGMENT : DATA ENDS CODE SEGMENT BEGIN PROC FAR ASSUME CS:CODE,SS:STACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX : RET BEGIN ENDP CODE ENDS END BEGIN 定义堆栈段及堆栈长度 定义数据段 定义代码段 将汇编源程序视为DOS下的子程序 将程序段前缀PSP进栈 设置用户数据段 返回到PSP,执行PSP中的第一条指令 INT 20H,结束程序返回调用程序
因为连接程序为每一个用户程序建立了一个 程序段前缀PSP,在PSP的开始处安排了一条 NT20H指令,执行该指令结束当前程序返回 调用程序
• 因为连接程序为每一个用户程序建立了一个 程序段前缀PSP,在PSP的开始处安排了一条 INT 20H指令,执行该指令结束当前程序返回 调用程序
而PSP的地址,其段地址寄存在DS和ES中; 偏移地址为0,将DS:0000地址进栈,即PSP 地址进栈。 PSP的长度为256个字节,即100H个单元, 主要存放了装入程序与DOS连接的信息 结束用户程序返回DOS有两种方法 其一:MO∨AH,4CH;返回DOS INT 2TH 其二:IT20H;返回调用程序,便于调试 它的机器码是CD20H,当用 DEBUG调用EXE 文件时,在DS:0000单元中便可看到该指令
•而PSP的地址,其段地址寄存在DS和ES中; 偏移地址为0,将DS:0000地址进栈,即PSP 地址进栈。 • PSP的长度为256个字节,即100H个单元, 主要存放了装入程序与DOS连接的信息。 • 结束用户程序返回DOS有两种方法: 其一:MOV AH ,4CH ;返回DOS INT 21H 其二:INT 20H ;返回调用程序,便于调试 它的机器码是CD20H,当用DEBUG调用EXE 文件时,在DS:0000单元中便可看到该指令
●D○S在转移控制权时,将CS指向EXE程 序的代码段,SS指向堆栈段,但DS和ES 并不指向用户程序的数据段和附加数据 段,而是指向PSP
• DOS在转移控制权时,将CS指向EXE程 序的代码段,SS指向堆栈段,但DS和ES 并不指向用户程序的数据段和附加数据 段,而是指向PSP