1 / 29

IBM — PC 汇编语言 程序设计 ( 第 2 版 )

清华大学计算机系列教材 沈美名 温冬蝉 编著. IBM — PC 汇编语言 程序设计 ( 第 2 版 ). 高级语言. 汇编语言. 计算机语言的发展. 机器语言. FORTRAN BASIC COBOL PASCAL C/C++ JAVA. 汇编语言的特点 面向机器的低级语言,通常是为特定的计算 机或计算机系列 专门设计的。 保持了机器语言的优点,具有直接和简捷 的特点。 可有效地访问、控制计算机的各种硬件设备 , 如磁盘、存储器、 CPU 、 I/O 端口等。

muriel
Download Presentation

IBM — PC 汇编语言 程序设计 ( 第 2 版 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 清华大学计算机系列教材 沈美名 温冬蝉 编著 IBM—PC汇编语言 程序设计(第2版)

  2. 高级语言 汇编语言 计算机语言的发展 机器语言 FORTRAN BASIC COBOL PASCAL C/C++ JAVA ...

  3. 汇编语言的特点 • 面向机器的低级语言,通常是为特定的计算 机或计算机系列专门设计的。 • 保持了机器语言的优点,具有直接和简捷 的特点。 • 可有效地访问、控制计算机的各种硬件设备, 如磁盘、存储器、CPU、I/O端口等。 • 目标代码简短,占用内存少,执行速度快, 是高效的程序设计语言。  经常与高级语言配合使用,应用十分广泛。

  4. 编程实现 c =a+b,并在屏幕上显示出结果。 #include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { int a,b,c; a=1; b=2; c=a+b; printf(“c=%d\n",c); return 0; } 例1 编译后的目标文件达到3.59KB

  5. 例 2. C = a + b data segment a db ? b db ? c db ? string db 'c=$' data ends code segment main proc far assume cs:code, ds:data, es:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax mov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh int 21h ret main endp code ends end start 汇编后的目标文件只有208字节

  6. 第1章 基 础 知 识  数制  数制之间的转换  运算  数和字符的表示

  7. 预 备 知 识 存储容量 1K = 1024 = 210 (Kilo) 1M = 1024K = 220(Mega) 1G = 1024M = 230 (Giga) 1个二进制位:bit (比特) 8个二进制位:Byte (字节) 1Byte = 8bit 2个字节: Word (字) 1Word = 2Byte = 16bit

  8. 数 制 基 数 数 码 二进制 Binary 2 0, 1 八进制 Octal 8 0, 1, 2, 3, 4, 5, 6, 7 十进制 Decimal 10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 十六进制 Hexadecimal 16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 1. 数 制 二进制: 基数为2,逢二进一 • 1101B= 1×2 3 + 1×2 2 + 1×2 0 = 13 十六进制:基数为16,逢十六进一 • 1001, 0001, 1000, 0111 • 9 1 8 7 • = 9 ×16 3 + 1 ×16 2 + 8 ×16 1 + 7 ×16 0

  9. 2. 数制之间的转换 • 二进制 十六进制 • 十进制 二进制 • 十进制 十六进制 降幂法 除法

  10.  二进制 十六进制 • 0011 0101 1011 1111 •     • 3 5 B F • ∴0011,0101,1011,1111B = 35BFH • A 1 9 C •     • 1010 0001 1001 1100 • ∴ A19CH = 1010,0001,1001,1100B

  11.  二进制 十进制 • 1011B = 23+21+20=11D • 降幂法 除法 • 例: 27D = ? B • 27 11 3 3 1 • - - - - • 2n 16 8 4 2 1 • 1 1 0 1 1 • ∴ 27D = 11011B

  12.  十六进制 十进制 • BF3CH = 11163 +15162 +3161 +12160 • = 48956D • 降幂法 除法 • 例:399D = ? H • 399 143 15 399/16→24/16→1/16→ 0 • - - - ↓ ↓ ↓ • 16n 256 16 1 F 8 1 •    • 1 8 F • ∴ 399D = 18FH

  13. 3. 运算(算术运算和逻辑运算)  算术运算 二进制数:逢二进一 借一为二 加法规则 乘法规则 0 + 0 = 0 0  0 = 0 0 + 1 = 1 0  1 = 0 1 + 0 = 1 1  0 = 0 1 + 1 = 0 (进位1) 1  1 = 1

  14. 十六进制数:逢十六进一 借一为十六 -1 0 5 C 3 H 3 D 2 5 H 4 2 E 8 H 3 D 2 5 H 0 5 C 3 H 3 7 6 2 H + - 1

  15. “与”运算(AND) “或”运算(OR) • A B AB A B AB • 0 0 0 0 0 0 • 0 1 0 0 1 1 • 1 0 0 1 0 1 • 1 1 1 1 1 1 • “非”运算(NOT) “异或”运算(XOR) • A AA B AB • 0 1 0 0 0 • 1 00 1 1 • 1 0 1 • 1 1 0  逻辑运算(按位操作)

  16. 例:X=00FFH Y=5555H,求Z=XY= ? • X= 0000 0000 1111 1111 B •  Y= 0101 0101 0101 0101 B • Z= 0101 0101 1010 1010 B •  Z=55AAH

  17. 4. 数和字符的表示  计算机中正负数的表示 假设机器字长为8位: 7 6 5 4 3 2 1 0 H.O.Nibble L.O.Nibble 符号位数值位 假设机器字长为16位: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 H.O.Byte L.O.Byte 符号位 = 0 正数数值位 =1 负数

  18. 数的常用表示法——原码 反码 补码 原码表示法:符号 + 绝对值 例:n = 8bit [+3]原码= 0 000,0011 = 03H [- 3]原码 = 1 000,0011 = 83H [+0]原码= 0 000,0000 = 00H [- 0]原码= 1 000,0000 = 80H  0 的表示不惟一 反码表示法:正数的反码同原码,负数的反码数值位与原码相反 例:n = 8bit [+5]反码= 0 000,0101 = 05H [- 5]反码 = 1 111,1010 = FAH [+0]反码= 0 000,0000 = 00H [- 0]反码 = 1 111,1111 = FFH  0 的表示不惟一

  19. 例: 机器字长8位,[- 46]补码 = ? • [46]补码 = 0 0 1 0 1 1 1 0 • 1 1 0 1 0 0 0 1 • 1 1 0 1 0 0 1 0 = D2H • 机器字长16位,[- 46]补码 = FFD2H • [+0]补码 = 0 0 0 0 0 0 0 0 • 1 1 1 1 1 1 1 1 • 0 0 0 0 0 0 0 0 = [- 0]补码 •  0 的表示惟一 按位求反 末位加一 按位求反 末位加一 补码(Two’s Complement)表示法: 正数的补码: 同原码 负数的补码:(1)写出与该负数相对应的正数的补码 (2)按位求反 (3)末位加一

  20. 十进制 二进制 十六进制 十进制 十六进制 • n=8 n=16 • +127 0111 1111 7F +32767 7FFF • +126 0111 1110 7E +32766 7FFE • ... ... … … ... • +2 0000 0010 02 +2 0002 • +1 0000 0001 01 +1 0001 • 0 0000 0000 00 0 0000 • -1 1111 1111 FF -1 FFFF • -2 1111 1110 FE -2 FFFE • ... ... … … ... • -126 1000 0010 82 -32766 8002 • -127 1000 0001 81 -32767 8001 • -128 1000 0000 80 -32768 8000 n位二进制补码的表数范围:- 2n-1 ≤ N ≤ 2n-1-1 无符号整数的表数范围:0 ≤ N  ≤ 2n-1

  21. 补码的加法和减法: 求补运算  :对一个二进制数按位求反、末位加一 [X]补码[-X]补码 [X]补码 加法规则:[X+Y]补码= [X]补码+ [Y]补码 减法规则:[X-Y]补码= [X]补码+ [-Y]补码 补码减法可转换为补码加法 例: 64 (-46) 18 0100 0000 1101 0010 0001 0010 + +

  22. 进位和溢出 进位: 由于运算结果超出了位数,最高有效位向 前的进位,这一位自然丢失,一般不表 示结果的对错。 溢出:表示结果超出了字长允许表示的范围, 一般会造成结果出错。 例: (-64) 11000000 127 01111111 + 64 01000000 + 1 00000001 0 00000000 128 10000000 1 进位 溢出

  23.  字符的表示 ASCII码:用一个字节来表示一个字符,低7位 为字符的ASCII值,最高位一般用作 校验位。 例: ‘A’ 41H ‘a’ 61H ‘1’ 31H 换行 0AH 回车 0DH 空格 20H

  24. 实验一 DEBUG的使用 • 一 、实验目的 掌握DEBUG常用命令的使用;熟悉CPU内部有多少寄存器;掌握访问段式存储器结构地址的表示方法。 二、实验内容 将数据段中的两个数求和,结果保存在数据段中。 源程序、机器语言程序如下: CS:0100 A1 00 00 MOV AX,[0000] CS:0103 03 06 02 00 ADD AX,[0002] CS:0107 A3 04 00 MOV [0004],AX CS:010A CB RETF 数据段内容如下: DS:0000 2301 2500

  25. 三、实验步骤 • 1、用E命令键入上述机器语言程序和数据段的初值 -E DS:000 23 01 25 00 -E DS:006 2A 2A 2A -E CS:100 A1 00 00 03 06 02 00 -E CS:107 A3 04 00 CB 2、用D命令检查数据段、代码段内容 -D DS:0 -D CS:100 3、用T命令逐条执行上述程序,注意每条指令执行后相应寄存器的变化 4、用U命令反汇编本程序 -U 100 10A

  26. 5、用R命令修改IP的内容为0100重新执行上述程序5、用R命令修改IP的内容为0100重新执行上述程序 • -R IP 显示:IP 010A 修改为:0100 6、用G命令运行程序 -G =CS:0100 107 观察:IP=? AX=? -G =CS:0100 10A 观察:IP=? AX=? 四、实验思考题 1、用A命令输入源程序:

  27. CS:0100 MOV AX,FFFF STC 0104 MOV DS,AX MOV BX,DS MOV ES,BX MOV CX,ES MOV SS,CX MOV DX,SS MOV SP,DX MOV BP,SP MOV SI,BP MOV DI,SI

  28. JNB 0121 XOR AX,DI JNZ 0125 CLC JMP 0104 0121 OR AX,DI JZ 0100 0125 HLT 2、用T命令单步执行上述程序,观察结果。

More Related