汇编语言(基础笔记)

基础信息:

  1. reg -->寄存器
  2. sreg -->段寄存器
  3. CPU 16位线,寄存器也是16位。 地址总线20位。

物理地址 =  段地址X16+偏移地址

(2的20次方 = 1MB (即内存最多1MB 可知32位最多4GB,64位最多4ZB)  1个存储单元 = 8bit(8位)= 1字节(B /Byte)  )

**存储单位一般用B,KB,MB,GB,TB,EB,ZB,YB,BB来表示**

  1. 寄存器

段寄存器:

CS  IP   代码段

DS  SI   数据段

SS  SP   堆栈       BP

ES  DI   附加寄存器

(数据不能直接送入段地址 要从数据寄存器中转移)

 

标志寄存器

FR

汇编语言(基础笔记)

 

数据寄存器(16位)

AX(accumulator):累加器,它是算术运算的主要寄存器,此外还可以作为乘,除运算及输入,输出的专用寄存器。

BX(Base):基址寄存器,常用于存放存储区的起始地址。

CX(Count):计数寄存器,常用于循环操作或字符操作中的计数器。

DX(Data):该寄存器常与AX配合,用于双字长运算,DX存放高位字,AX存放底字位,此外还可以用于输入、输出指令中存放外部设备接口的端口地址

 

注意:[CX] [AX] [DX] [DS]是错误写法 [BX]是正确写法

             [BX+si/di] / [BP+SI/DI] 是正确写法 其它是错误写法

 

大小写(字母是一个字节大小)

           将第五位置0--->大写(and 11101111)  置1--->小写(or 00010000)

 

0000:0000 – 0000:03FF 1024个储存单元为中断程序(256个)的入口地址 (每个中断程序入口地址占2个字 = 4个字节/存储单元) 低地址放IP 高地址放CS

指令               

 

  1. 跳转

Jmp CS:IP  ;(段地址:偏移地址)

Jmp AX    ;(段地址=DS 偏移地址=AX)

Jmp  dword ptr ds:[0]   ;(从DS:[0]中取[0+2]作为CS段地址,[0]作为IP地址)

Jmp word ptr ds:[0]     ;(从DS[0] 中取[0]作为IP地址)

Jmp short                             ;(IP+8位的偏移地址)

Jmp near                             ;(Ip+16位的偏移地址)

Jmp far                                 ;(CS:ip)

JCXZ                                       ;(CX!=0 则做短转移)

Je 等于就转移

Jne    不等于就转移

Jb       小于就转移

Jnb    不小于就转移

Ja       大于就转移

Jna    不大于就转移

 

MOVSB  ((ES)*16+(DI)) = ((DS)*16+(SI)) 如果DF=0 si++ di++ 如果=1 si—di—(此条指令用于两个数据段转移数据 每次一个字节 SI DI移动一位)

 

MOVESW 同上 每次SI DI一个字

 

  1. 一般

MOV AL,[0]      ;(从存储单元DS:[0]中取一个字节到AL)

MOV AX,[0]      ;(从存储单元DS:[0]中取一个字到AX)

 

Push SP-2   再入栈

Pop  先出栈   SP+2

(一个段的最大值 偏移地址是16位,则为216次方,每个存储单元1Byte 所以为 64KB)

 

Idata 常量

 

--程序返回 程序后台COMMAND 将程序载入内存 运行完之后返回

MOV AX,4COOH

INT 21H

---over

 

DB 200 dup(0) 重复2000DB字节)

 

--CALL RET

CALL    è push ip ,Jmp near ptr标号

CALL far ptr è PUSH CS ,PUSH IP ,Jmp far ptr 标号

RET èPOP IP

RETF è POP IP ,POP CS

OFFSET 取偏移地址

SEG 取段地址

 

 

DIV 被除数放在DX AX è除数是16位   AXè除数是8位      (8位即在2的8次方255之内)

 

 

MUL AL  è保存到AX(即乘数是8位之内) DX,AX(乘数是16位的时候)

 

ADC A,B (A+B+CF)加了一个进位标志位 一般都是先从低位加(有进位标志位了) 再到高位

 

CMP 减法不保留结果只改变进位标志位

 

CLD  DF置0

STD  DF置1

PUSHF        标志寄存器的值入栈

POPF         标志寄存器的值出栈

IRET           指令返回源程序

 

*中断指令(看了一大半 后面的没看了)

0000:0000 到0000;03FF 大小共1024个单元 没个中断入口地址为2个字(4个存储单元 高地址存段地址,低地址存偏移地址) 1024/4 = 256个中断入口