Skip to content

Textbook Note

一些注意点

Ascll 0 - 30h(48) 9-3Ah(58)

Chapter4 源程序格式

语句

  1. 指令语句
  2. 伪指令语句
  3. 汇编指示语句

语法成分

变量与标号

取名
  • 变量可以使用的字符是 0~10 a~z A~Z @ $ ? _
  • 不能以数字开头
  • $ 与 ?不能单独用作变量名或标号名
  • 缺省情况下,变量名及标号名均不区分大小写
定义

变量名 db | dw | dd | dq | dt 初始值
数组赋值
abc db 100 dup(0)
; DUP括号内的值可以重复
x db 3 dup(1,2)
; DUP允许嵌套
y db 2 dup('A', 3 dup('B'), 'C')

Chapter5 程序调试

Turbo Debugger(TD)

#编译
tasm /zi hello; #参数/zi表示full debug info
tlink /v hello; #参数/v表示include full symbolic debug information
#调试
td hello.exe

Chapter1 绪论

代码实例

data segment
s db "Hello,world!", 0Dh, 0Ah, '$'
data ends

code segment
assume cs:code, ds:data
main:
    mov ax, data
    mov ds, ax
    mov ah, 9
    mov dx, offset s
    int 21h
    mov ah, 4Ch
    int 21h
code ends
end main
d: //进入D盘
cd \masm //进入目录
edit hello.asm //edit编辑源程序
masm hello; //编译
link hello; //链接
hello //运行
+ edit F1查询 F3+E保存 + 源程序保存到d:\masm目录下 + 注意分号

ASM 理解 C

指针

变量类别

递归

Debug 技能

硬件断点

Chapter2 基础知识

数制

  • 十六进制用 H/h 做后缀,若最高位为字母加前缀 0
  • 八进制用 Q/q 做后缀
  • 二进制用 B/b 做后缀

数据组织

字节

  • 内存中每个字节都有一个地址
  • 可表示 [0,255] 的非符号数和 [-128,127] 的符号数
  • 可存放字符的 ASCII
  • 关键字 db 定义字节类型数组或变量 , 相当于 char unsigned char
    a db 10,20,30,40 ; 定义一个字节类型的数组a
    b db 0FFH ; 定义一个字节类型的变量b
    c db 'A' ; 定义一个字节类型的变量c
    

(word)

  • 2 个字节,16
  • 8 位称为高字节
  • 可存放 16 位的段地址及 16 位的偏移地址
  • dw 定义字类型的变量或数组,相当于 short int unsigned short int

双字 (dword)

  • 2 个字,4 字节,32
  • 分为低字和双字
  • 可存放 float 类型的浮点数
  • dd 定义双字类型的变量或数组,相当于 long int,unsigned long int,float

四字 (qword)

  • 可存放 double 类型的浮点数
  • dq 定义四字类型的变量或数组,相当于 long long,double

十字节 (tbyte)

  • 可存放 80 位的浮点数
  • 相当于 long double

扩充

零扩充

  • 非符号数
  • 左侧补 0

符号扩充


Chapter3 CPU、内存、接口

内存

地址

  • 物理地址
  • 逻辑地址 段地址 : 偏移地址

(segment)

  • 内存块长度 64KB
  • 20 位首地址低 4 位等于 0

寻址

  • 直接寻址 \(\(段寄存器:[常数]\)\)
  • 间接寻址 \(\(段寄存器:[寄存器_1+寄存器_2+常数]\)\)

小端规则

输入和读取宽度大于 8 位的数据时,先低 8 位后高 8

缺省段址

总线

  • 地址总线:决定内存单元的数量
  • 数据总线:决定 CPU 和外界的数据传送速度
  • 控制总线:决定 CPU 对外部器件的控制能力

寄存器

8086 所有寄存器都是 16 位的

通用寄存器 (AX BX CX DX)

段寄存器 (CS DS ES SS)

CS(代码段寄存器) IP(指令指针寄存器)

物理地址

地址加法器:物理地址 = 段地址 *16+ 偏移地址

寄存器(内存访问)

ds 段寄存器

指令

  • mov 传送指令 mov al,[0] (0表示内存单元的偏移地址)
  • jmp 转移指令 修改 CS IP
    jmp 段地址:偏移地址 jmp 某一合法寄存器 功能为:用寄存器中的值修改IP jmp ax 类似 mov IP,ax

评论区

如果有什么问题或想法,欢迎大家在下方留言~