1、1第 1 章 基础知识一、 机器语言与汇编语言汇编语言是符号化的机器语言,即用助记符表示的语言。助记符一般是英文单词缩写,便于编写、阅读、检查,克服了机器语言的缺点,又继承了它的优点。汇编语言不能直接运行,需要通过:编辑汇编连接,最后生成可执行程序。二、 进位记数制注意:十进制数: 用 D (decimal) 例 117 D二进制数: 用 B( binary) 例 110110 B八进制数: 用 O (octal) 例 117 O十六进制数: 用 H (hexadecimal) 例 17D H例: 117D117/2=58 158/2=29 029/2=14 114/2=7 07/2=3 13
2、/2=1 11/2=0 1117D=1110101B(1)十六进制数 二进制数1D17H= 1,1101,0001,0111B(2)十六进制数 十进制数 (高教 P2)123H=1*162+2*161+3*160=291三、计算机中数和字符的表示1、 原码、反码、补码补码:一种很好的机器数表示法,补码可以把负数转化为正数,使减法转换为加法补码的求法: -6 00001010B 11110101B +1B 11110110B绝对值 反码+1 补码-117D1111 0101B(原)1000 1010B(反)1000 1011B(补)8BH2、 字符表示法最常用的是:美国信息交换标准代码 ASCI
3、I (高教 P7 表 1-4)3、BCD 码:压缩 BCD 码、非压缩 BCD 码四、几种基本的逻辑运算AND、OR、NOT、XOR2第 2 章 80x86 计算机组织一、80x86 微处理器概况180x86 寄存器组 (P21 图 2.3)分类:通用寄存器、专用寄存器、段寄存器(1)通用寄存器a)数据寄存器(AX、BX、CX、DX):用来暂时存放计算过程中所用到的操作b)指针及变址寄存器(SP、BP、SI、DI):在存储器寻址时,提供偏移地址,另外,在运算过程中也可存放操作数。注:以字(16 位)为单位。(2)专用寄存器IP、SP、FLAGS(OF、SF、ZF、CF、AF、PF,DF、TF、
4、IF)2段寄存器段寄存器也是一种专用寄存器,主要用于存储器寻址,用来直接或间接地存放段地址。16 位代码段(code segment CS) 数据段(data segment DS)堆栈段(stack segment SS) 附加段(extra segment ES)四、存储器1存储单元的地址和内容(1)地址范围8086、8088 的地址总线为 20 位,可访问地址范围:2 N 00000 - FFFFF H 1MB(2)地址内容一个存储单元中存放的信息称为该存储单元的内容,存储单位:字节2. 段的概念:20 位物理地址可由 16 位段地址和 16 位偏移地址组成。物理地址计算方法: 16d段
5、地址+偏移地址=物理地址DB、DW、DD 分配单元地址五、外部设备端口访问指令:IN 和 OUT 指令端口寻址范围:064KB六、堆栈技术堆栈指针 SS:SP。堆栈操作遵循“先进后出、后进先出”的原则。SP-2 然后进栈,出栈然后 SP+23第 3 章 80x86 的指令系统和寻址方式一、指令的组成1指令的组成由操作码、操作数两部分组成2操作数的类型立即数、寄存器操作数、存储器操作数、I/O 操作数二、80x86 的寻址方式立即寻址方式: MOV BL,36H寄存器寻址方式:MOV BX,AX位移量、基址(BX、BP) 、变址(SI、DI)直接寻址方式:MOV BX,ES:1000H寄存器间接
6、寻址方式:BX、SI、DI 默认段寄存器为 DS,BP 默认段寄存器为 SS。 MOV AX,SI寄存器相对寻址方式:MOV AX,SI+10H基址变址寻址方式:MOV AX,BXSI相对基址变址寻址方式:MOV AX,BX+SI+100HI/O 端口寻址方式:IN AL,21H ;OUT DX,AL数据传送指令、串处理指令、算术指令、控制转移指令、循环控制指令、逻辑指令、处理机控制指令、子程序一 数据传送指令1通用数据传送指令MOV (move) 传送PUSH (push onto the stack) 进栈POP (pop from the stack) 出栈XCHG (exchange)
7、 交换2累加器专用传送指令(高教 P27)该指令必须使用累加器寄存器(AX 或 AL)传送信息IN (input) 输入OUT (output) 输出XLAT (translate) 换码3地址传送指令LEA (load effective address) 有效地址送寄存器 LDS (load DS with pointer) 指针送寄存器和 DS LES (load ES with pointer) 指针送寄存器和 ES LSS (load SS with pointer) 指针送寄存器和 SS4标志寄存器传送指令 (高教 P27) LAHF (load AH with flags) 标志
8、送 AH SAHF (store AH into flags) AH 送标志寄存器PUSHF (push the flags or eflags) 标志进栈POPF (pop the flags or eflags) 标志出栈5类型转换指令 (高教 P66)CBW (convert byte to word) 字节转换为字CWD (convert word to double word) 字转换为双字操作码 操作数 操作数4二算术指令(高教 P64、65)1加法指令ADD (add) 加法ADC (add with carry) 带进位加法INC (increment) 加 12减法指令SUB
9、 (subtract) 减法SBB (subtract with borrow) 带借位减法DEC (decrement) 减 1NEG (negate) 求补(按位取反加 1)CMP (compare) 比较(与减法指令的唯一区别是不回送结果)3乘法指令MUL (unsigned multiple) 无符号数乘法IMUL(signed multiple) 带符号数乘法4除法指令DIV (unsigned divide) 无符号数除法IDIV(signed divide) 带符号数除法5十进制调整指令(高教 P67)1)压缩的 BCD 码调整指令DAA (decimal adjust for
10、addition) 加法的十进制调整指令 DAS (decimal adjust for subtraction) 减法的十进制调整指令三逻辑指令1逻辑运算指令AND (and) 逻辑与OR (or) 逻辑或NOT (not) 逻辑非XOR (exclusive or) 异或TEST (test) 测试(两个操作数逻辑与,但不回送结果)2移位指令(高教 P70 图 4-1)SHL (shift logical left) 逻辑左移SHR (shift logical right) 逻辑右移 SAL (shift arithmetic left) 算术左移 (带符号数的运算) SAR (shif
11、t arithmetic right) 算术右移 (带符号数的运算) ROL (rotate left) 循环左移 小循环 ROL (rotate right) 循环右移 RCL (rotate left through carry) 带进位循环左移 大循环 RCR (rotate right through carry)带进位循环右移串处理指令MOVS (move string) MOSB 串传送MOVSW CMPS(CMPSB、CMPSW) (compare string) 串比较 SCAS(SCASB、SCASW) (scan string) 串扫描 LODS(LODSB、LODSW)
12、(load from string) 从串中取数 STOS(STOSB、STOSW) (store in to string) 存入串重复前缀指令 REP REPZ REPNZ5控制转移指令(1)无条件转移指令(高教 P23、P86)JMP (jmp) 跳转指令 分为:段内和段间转移(2)条件转移指令 (高教 P87)简单条件转移指令无符号数条件转移指令. 有符号数条件转移指令 (3)循环指令 (高教 P112)LOOP (loop) 循环 LOOPZ/LOOPE(loop while zero ,or equal) 当为零或相等时循环 LOOPNZ/LOOPNE(loop while noz
13、ero ,or not equal) 当不为零或不相等时循环子程序 (清华 P98) (高教 P143)CALL (call) 调用RET (return) 返回处理机控制与杂项操作指令(1)标志处理指令CLC (clear carry) 进位位置 0 指令 CF0STC (set carry) 进位位置 1 指令 CF1CLD (clear direction) 方向标志位置 0 指令 DF0STD (set direction) 方向标志位置 1 指令 DF1CLI (clear interrupt) 中断标志置 0 指令 IF0STI (set interrupt) 中断标志置 1 指令
14、 IF1 (2)其他处理机控制与杂项操作指令 空操作指令 NOP 总线封锁前缀指令 LOCK 暂停指令 HLT 换码指令 ESC 等待指令 WAIT6第 4 章 汇编语言程序格式指令语句结构:标号: 助记符 操作数 1,操作数 2 ;注释伪指令语句结构:符号名 定义符 参数 1,参数 n ;注释宏指令语句结构:标号: 宏指令名 参数 1,参数 n ;注释(1)段定义伪指令 SEGMENT/ENDS格式: 段名 SEGMENT 定位类型组合类型类别段名 ENDS段名由程序员给定(2)指定段址伪指令 ASSUME(明确段和段寄存器的关系)ASSUME 段寄存器,段名 ,注:ASSUME 伪操作只是
15、指定某个段分配给那一个段寄存器,它并不能把段地址装入段寄存器中。(3) 子程序定义伪指令过程名 PROC 类型说明过程体过程名 ENDP 其余重点复习伪指令: DB、DW、DD、EQU、$、DUP、PTR、SEG、OFFSET、ORG、BYTE、WORD、DWORD、NEAR、FARDOS 功能:1、2、9、10、4CH 的调用方式一、显示(或打印)单个字符使用 DOS 功能调用 02H 功能来实现,把要显示字符的 ASCII 码送入 DL 寄存器,02H 送入 AH 寄存器,使用 INT21H 功能调用。例:显示字符?MOV DL,?MOV AH,02HINT 21H二、显示字符串使用 9
16、号功能调用,要显示的字符串以$字符为结束标志,并将 DS:DX 指向该数据缓充区。例: DATA SEGMENTBUF DB HOW ARE YOU!$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMOV DX,OFFSET BUFMOV AX,09HINT 21H CODE ENDS三、键入单个字符7使用 DOS 的 01 号功能调用,直接从键盘上接收一个字符。该字符的 ASCII 码将放入 AL 寄存器中,同时在屏幕上显示。例:MOV AH,01INT 21H 四、键入字符串使用 10 号功能调用,可以从键盘上输入一串字符,且在屏幕上显示。DS:DX 要指向输入缓充区的首地址。例:DATA SEGMENTKBUF DB 50DB ?DB 50 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMOV AX,DATAMOV DS,AXLEA DX,KBUFMOV AH,10INT 21HCODE ENDS 五、程序结束1 使用 DOS 功能调用MOV AH,4CHINT 21H2 以子程序的方式正常返回 DOS 系统PROC FARPUSH DSMOV AX,0PUSH AXRETENDP注:以上带 符号部分只作为了解