目录

1. 汇编

2. 寻址方式

3. 指令系统

3.1 数据传输指令

3.2 算数运算指令

3.3 逻辑运算和移位指令

3.4 串操作指令

3.5 控制转移指令

3.6 处理器控制指令

4. 伪操作指令

5. DOS系统功能调用

6. 汇编语言源程序格式


1. 汇编

汇编语言源程序转换为机器码(存在CS段)这个过程,称之为汇编

实验过程:

首先有一个源文件.asm,可以在txt文件里输入汇编程序,然后将文件后缀名改为.asm

后使用MASM.exe或TASM.exe进行汇编,若语法没问题,会生成.obj文件

再使用LINK.exe文件对.obj文件进行连接,这个过程会为.obj文件分配内存,并生成.exe文件。

2. 寻址方式

寻址方式(Addressing Mode): find the address of location of data or instruction.

asmx java客户端生成 asm生成exe_操作数

上图中红色的是寄存器,绿色是存储器,1234H是立即数。

有三种操作数:存储器、寄存器、立即数

SP、BP寄存器中一般放偏移地址

在寻址时,不考虑段超越的一般情况下:

SI、DI、BX、AX对应DS段,SP、BP对应SS段,当出现例如[BP+SI]的情况,对应SS段

3. 指令系统

3.1 数据传输指令

1)MOV指令

MOV dest, src        ;(dest)<-(src)

2)堆栈操作指令

堆栈:内存中开辟的特定区域,用以存放CPU寄存器或存储器中暂时不用的数据。堆栈所在的内存的段称为堆栈段,其段地址放在SS中。先进后出,后进先出

堆栈指针SP:指向当前栈顶的偏移地址。

PUSH src        ;(SP)<-(SP)-2        ((SP)+1:(SP))<-(src)

POP dest        ;(dest)<-((SP)+1:(SP))        (SP)<-(SP)+2

3)交换指令

XCHG dest, src        ;(dest)<-->(src)

4)查表指令

XLAT src_table        ;(AL)<-((BX)+(AL))

执行指令前:序号->AL,表首址->BX

执行指令后: AL<-表中序号对应的字节内容

5)输入输出指令

完成累加器和I/O端口之间的数据传送,立即数都是地址

IN acc, port        ;(acc)<-(port)

OUT port, acc        ;(port)<-(acc)

端口号为8位时,直接寻址,端口地址为16位时,间接寻址,端口地址必须先放在DX寄存器中

6)目标地址传送指令

讲内存单元的有效地址(而不是内容)传送到目标寄存器

LEA SI, AREA1

MOV SI,OFFSET AREA1        ;两句指令相同

*7)标志传送指令

LAHF、SAHF、PUSHF、POPF

3.2 算数运算指令

ADD dest,src        ;(dest)< (dest)+(src)+(CF)

ADC dest,src        ;(dest)< (dest)+(src)+(CF)    

INC dest        ;(dest)< (dest)+1

SUB dest,src        ;(dest)< (dest)-(src)

SBB dest,src        ;(dest)< (dest)-(src)-(CF)

DEC dest        ;(dest)<(dest)-1

NEG dest        ;(dest)< 0-(dest)        求补指令,操作数可能是存储器或寄存器。

CMP dest,src        ; (dest)-(src)               

MUL src        ;字节乘法(AX) <(src)*(AL)        字乘法(DX: AX) < (src)*(AX)        无符号数乘法指令

IMUL src        ;字节乘法(AX) <(src)*(AL)        字乘法(DX: AX) < (src)*(AX)        带符号数乘法指令

DIV src        ;无符号数除法指令

IDIV src        ;带符号数除法指令

3.3 逻辑运算和移位指令

1)逻辑运算指令

AND dest, src        ;(dest)<- (dest)&(src)

OR dest, src        ;(dest)<- (dest)^(src)

XOR dest, src        ;(dest)<- (dest)异或(src)

NOT dest        ;字节求反(dest)<- FFH-(dest)        字求反(dest)<- FFFFH-(dest)

TEST dest, src        ;(dest)&(src),结果不送回

2)移位指令

SHL dest, 1

SHL dest, CL

移位指令:SHLSALSHRSAR        H:无符号数,A:带符号数

循环移位指令:RCLROLRCRROR

asmx java客户端生成 asm生成exe_asmx java客户端生成_02

  

asmx java客户端生成 asm生成exe_操作数_03

3.4 串操作指令

总是SI放源操作数的偏移地址,而DI放目的操作数的偏移地址。

源操作数隐含的段寄存器是DS,但允许段超越;目标操作数隐含的段寄存器是ES,不允许段超越

每一次操作后自动修改地址指针。

有的串操作指令可以加重复前缀:REP、REPZ ( REPE )、REPNZ ( REPNE )

串操纵汇编指令的格式可以加上操作数,或直接加上字母B (字节操作)或W (字操作)

MOVS串传送指令        ;将源串(DS:SI)->目的串(ES:DI),SI和DI自动加1或减1。

CMPS串比较指令        ;将源串(DS:SI) 和目的串(ES:DI) 比较,不影响内容,SI和DI自动加1或减1。

SCAS串扫描指令        ;将关键字->AL(AX),和目的串(ES:DI)的内容比较,SI不变,DI自动加1或减1。

LODS串装入指令        ;将源串(DS:SI)->AL(AX),SI 自动加1或减1,DI不变。

STOS串送存指令        ;将AL(AX)->目的串(ES:DI),SI不变,DI自动加1或减1。

串操作方向由CLD和STD指令设置:

CLD,地址递增方向(DF=0)        STD,地址递减方向(DF=1)

REPZ表示相等重复,即(CX)≠0且(ZF) = 1继续比较

REPNZ表示不等重复,即(CX)≠0且(ZF) = 0继续比较

3.5 控制转移指令

1)转移指令

无条件转移

JMP NEXT

条件转移

JZ、JNZ、JC、JNC、JO、JNO、JS、JNS、JP、JNP

2)循环控制指令

LOOP short lable         ;short lable 相等或等于0循环,如果不为0,则循环到短标号处

3)过程调用指令

CALL delay

RET

4)中断指令

INT n        ;n为中断类型号,取值在0~255之间

IRET        ;中断返回指令,自动将推入堆栈的段地址和偏移地址弹出,同时恢复标志寄存器的内容。

3.6 处理器控制指令

标志位操作(CLC、STC、 CMC、CLD、STD、CLI、STI)

空操作指令NOP

*处理器暂停指令HLT

*处理器等待指令WAIT

*处理器脱离指令ESC

*总线锁定指令LOCK

4. 伪操作指令

指令性语句:可以产生相应的机器码        eg.LOOPER: MOV AL,DATA[SI]

指示性语句(伪操作指令):不产生机器码。        eg.DATA1 DB 0F8H,60H,0ACH,74H

格式:[名字] 操作码/伪操作[操作数]; [注释]

指令助记符: MOV, ADD,...

指示性(伪指令)操作符: DB, DW,SEGMENT,ENDS,ASSUME,END,

保留字: SEGMENT ENDS OFFSET SIZE DB DW DD MOV PUSH ADD SUB MUL DIV INC DEC I OOP PROC ENDP CALL RET END
 

5. DOS系统功能调用

DOS ( Disk Operation System)和BIOS(Basic Input andOutput System)是为用户提供的两组系统服务程序。
BIOS是IBM PC/XT的基本I/O系统,负责管理系统的测试程序、初始化引导程序、一-部分中断矢量装入程序及外部设备的服务程序,用户可以直接调用。

DOS是IBM PC/XT的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供调用的服务子程序,完成设备的管理和磁盘文件的管理。

用户控制PC机硬件的方法:
高级语言->调用DOS程序->使用BIOS程序->直接访问硬件

DOS系统功能调用(INT 21H)

调用方法:

1、子程序规定的入口参数送指定的寄存器。

2、系统功能调用号送AH

3、INT 21H

举例:02H功能是显示字符。4CH功能返回DOS。0AH功能从键盘输一个字符入内存。

MOV AH,OAH

INT 21H

6. 汇编语言源程序格式

DATA	SEGMENT
DATA1	DB  0F8H, 60H, 0ACH, 74H, 3BH
DATA2	DB  0C1H, 36H, 9EH, 0D5H, 20H
DATA3	DB  5 DUP (?)
DATA	ENDS

CODE	SEGMENT
ASSUME DS: DATA, CS: CODE

START:	MOV   AX, DATA
		MOV   DS, AX
        XOR    SI, SI
        MOV   CX, 5
NEXT:   MOV  AL, DATA1[SI]
        SBB   AL, DATA2[SI]
        MOV  DATA3[SI], AL
        INC   SI
        LOOP  NEXT

        MOV   AH, 4CH
        INT   21H			
CODE	ENDS
        END   START