IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 微机系统与接口——2.汇编语言 -> 正文阅读

[嵌入式]微机系统与接口——2.汇编语言

目录

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.

上图中红色的是寄存器,绿色是存储器,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

??

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:35:52  更:2022-05-05 11:39:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 0:52:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码