汇编语言源程序基础分析--跑马灯
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、示例代码
- 二、代码分析
- 1.显示提示
- 2.端口输出
- 3.初始化灯值
- 4.检测
- 5.输出
- 6.延时
- 7.移位
- 8、收尾
- 总结
前言
以LED跑马灯汇编代码为例,介绍汇编代码基础知识
一、示例代码
代码如下(示例):
data segment
portA equ 400H ; PA口地址
s db "twenty four LEDs flicker circularly. Press any key to exit ...",0dh,0ah,"$" ;程序功能提示
data ends
code segmentassume cs:code,ds:data
go: mov ax,datamov ds,axmov dx,offset s ;显示提示mov ah,9int 21hmov dx,porta+3mov al,80hOut dx,al ; 三端口均初始化为方式0输出
L0: mov si,24mov bx,7 ; 低16位初始值设为1(一个灯亮)mov cl,0 ; 高8位初始值设为0
L1: mov ah,0bHInt 21h ; 有无按键Cmp al,0ffHJz exit mov dx,porta ; 输出24位数mov al,blOut dx,al Inc dxmov al,bhOut dx,al Inc dxmov al,clOut dx,al Call delay05 ; 延时SHL bx,1 ; 低16位左移一位Rcl cl,1 ; 高8位左移一位dec si jnz L1Jmp L0 ; 重新开始
Exit: mov ah,4chInt 21h
delay05 proc near ; 循环延时子程序push cxpush bxmov cx,0020H
d1: mov bx,1200h
d2: dec bxjnz d2loop d1pop bxpop cxret
delay05 endp
Code endsEnd go
二、代码分析
1.显示提示
ds寄存器存入段地址,即data段内容存入
代码如下:
go: mov ax,datamov ds,ax
offset语句调用偏移地址s处的内容
代码如下:
s db "twenty four LEDs flicker crosswise. Press any key to exit ...",0dh,0ah,"$" ;程序功能提示
...
go:mov dx,offset s ;显示提示
mov ah,9 int 21h;实现字符串输出显示
mov ah,9int 21h
AH | 功能 | 调用参数 | 返回参数 |
---|---|---|---|
09 | 显示字符串 | DS:DX=串地址’$'结束字符串 |
2.端口输出
porta+端口与dx连接,dx输出al值(80h),即三端口初始化
代码如下(示例):
mov dx,porta+3mov al,80hOut dx,al ; 三端口均初始化为方式0输出
3.初始化灯值
初始化灯亮,三个灯亮
代码如下(示例):
L0: mov si,24mov bx,7 ; 低16位初始值设为7(三个灯亮)mov cl,0 ; 高8位初始值设为0
4.检测
检测有无按键
代码如下(示例):
L1: mov ah,0bHInt 21h ; 有无按键
AH | 功能 | 调用参数 | 返回参数 |
---|---|---|---|
0B | 检验键盘状态 | AL=00 有输入AL=FF 无输入 |
检测al地址是否等于0ffh
代码如下(示例):
L1: ...Cmp al,0ffHJz exit
cmp相当于减法,且值影响ZF标志位。al-0ffh=0,则ZF=1;
JZ跳转至exit函数
exit:带返回值结束
Exit: mov ah,4chInt 21h
5.输出
通过端口A输出24位数至dx
L0: .....mov dx,porta ; 输出24位数
将bl值写入dx,低八位
L0: .....mov al,blOut dx,al
dx自动增加1,同DX++
L0: .....Inc dx
dx输出bh值,中八位
L0: .....mov al,bhOut dx,al
dx自动增加1,同DX++
L0: .....Inc dx
dx输出cl值,高8位
L0: .....mov al,clOut dx,al
6.延时
call语句:IP(和CS)入栈,后转移;同jmp
L0: .....Call delay05 ; 延时
循环延时子程序
delay05 proc near ; 循环延时子程序push cxpush bxmov cx,0020H
d1: mov bx,1200h
d2: dec bxjnz d2loop d1pop bxpop cxret
delay05 endp
7.移位
代码:
L0: .....SHL bx,1 ; 低16位左移一位Rcl cl,1 ; 高8位左移一位
SHL(Shift Left): 逻辑左移:每位左移, 低位补 0, 高位进 CF
SHR(Shift Right): 逻辑右移:每位右移, 低位进 CF, 高位补 0
SAL(Shift Arithmetic Left): 算术左移:每位左移, 低位补 0, 高位进 CF
SAR(Shift Arithmetic Right):
算术右移:每位右移, 低位进 CF, 高位不变
结果影响 OF、SF、ZF、PF、CF
;ROL(Rotate Left): 循环左移:循环左移, 高位到低位并送 CF
ROR(Rotate Right): 循环右移:循环右移, 低位到高位并送 CF
RCL(Rotate through Carry Left): 带进位循环左移:循环左移, 进位值(原CF)到低位, 高位进 CF
RCR(Rotate through Carry Right): 带进位循环右移:循环右移, 进位值(原CF)到高位, 低位进 CF
结果影响 OF、CF
8、收尾
si- - ,jnz判断si是否结果为0;不为0则转入L1,否则向下执行jmp L0
L0: .....dec si jnz L1Jmp L0 ; 重新开始
dec:减1指令,相当于sub si,1
影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位.
JCC指令
1、JE, JZ 结果为零则跳转(相等时跳转) ZF=1
2、JNE, JNZ 结果不为零则跳转(不相等时跳转) ZF=0,否则按序向下执行。N为不,Z为0
3、JS 结果为负则跳转 SF=1
总结
汇编语言源程序基础分析--跑马灯相关推荐
- 汇编语言比C51需要效率高,汇编语言与C51语言实现跑马灯实验的比较 -
当前开发单片机应用系统程序主要应用汇编语言和C51语言,采用汇编语言编写可直接操纵系统的硬件资源,能编写出高效运行的程序代码,程序运行速度快.而采用C51语言编写可改善程序的可读性和可移植性,利于产品 ...
- 使用POTEUS软件来进行模拟仿真 8086汇编语言花式跑马灯课程设计及代码
一.设计目的 通过本次课程设计让我们进一步深入汇编语言的学习,掌握简单的接口设计技术,将理论知识与实际相联,更进一步地深入学习8255A.8086.8253等芯片的相关知识,以及学习使用POTEUS软 ...
- linux arm中断跑马灯,S3C2410 MDK实验---ARM汇编语言实现跑马灯
具体思路: 由于开发板是将GPF4-7与灯相连,所以通过设置GPFCON控制寄存器将将LED灯相连的引脚4,5,6,7设置为输出功能,将他们的上拉电阻设置为禁用(设置GPFUP为0),通过修改GPFD ...
- 8255控制四个双色灯C语言,汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮...
最后改进代码: .MODELTINY .STACK100 .DATA ledshow DB 11111110B ;数据段定义变量按"变量名 数据类型 数据";DB为字节型 seve ...
- s3c2440芯片累加汇编语言,s3c2440 --跑马灯 C+汇编代码
原标题:s3c2440 --跑马灯 C+汇编代码 /*_asm_c.c*/ #rGPFCON (*(volatile unsigned *)0x56000050) //Port F control # ...
- c语言跑马灯实验报告,单片机跑马灯实验
一.实验目的 1. 熟悉HNIST-2型单片机系统相关硬件电路,程序下载方法: 2. 掌握采用汇编语言与C语言开发单片机系统的程序结构: 3. 掌握51系列单片机通用I/O口的使用. 二.实验前准备 ...
- c语言程序设计点亮第一个LED,实验2__C语言程序设计及_LED跑马灯实验.ppt
实验2__C语言程序设计及_LED跑马灯实验 软件工程系 实验目的 进一步熟悉ADS开发环境,并能进行相关设置 熟悉裸机系统下C语言运行环境的设置方法. 掌握ADS下C语言程序的编辑.编译.链接及下载 ...
- 单片机实现跑马灯c语言程序,用单片机编写几种跑马灯程序
任务: 1.在电路板上实现跑马灯,一次1匹 2.在电路板上实现跑马灯,一次2匹 3.在电路板上实现4个二极管的同时闪烁 源程序1: /********************************* ...
- 单片机按键启停c语言,ZigBee-CC2530单片机 - 按键控制跑马灯的启停
ZigBee-CC2530单片机 - 按键控制跑马灯的启停 程序源码 #include "ioCC2530.h" //引用CC2530头文件 #define LED1 (P1_0) ...
- c语言编写单片机跑马灯,用单片机编写几种跑马灯
任务: 1.在电路板上实现跑马灯,一次1匹 2.在电路板上实现跑马灯,一次2匹 3.在电路板上实现4个二极管的同时闪烁 源程序1: /********************************* ...
最新文章
- php微信级联菜单,php微信公众号开发之二级菜单
- 服务器不显示磁盘柜,磁盘柜与服务器的关系
- Linux查看本机外网ip
- Python 测试开发教程
- Python常见十六个错误集合,你知道那些?
- iis7怎么安装php7,Linux下如何安装php7
- RLock vs Lock
- javascript 库_您应该在2020年尝试的10个很棒JavaScript库
- 网易北京:全员核酸检测为阴性 园区环境检测为阴性
- python入门——P43魔法方法:算数运算2
- 缠论k线合并处理python实现_缠论期货:道琼斯工业指数缠论分解体系5F趋势背驰,3买能否构筑成功?...
- Parse分析之 -- Enum.Parse
- Matlab归一化方法
- (附源码)计算机毕业设计ssm电商后台管理系统
- WGS84经纬度坐标与北京54坐标或者西安80坐标的关系-3
- 做个合格的吃货~利用Python爬取美食网站3032个菜谱并分析
- 【TencentOS tiny学习】源码分析(6)——互斥锁
- JS实现京东表单注册
- 爬虫入门必学——常见的几种网站类型
- 关于极光推送报错6003的一些问题
热门文章
- qt结合arcgis进行开发
- 2021年高考成绩查询海南时间,2021年海南高考后多久出成绩,附海南高考成绩查询时间入口方式...
- 进程互斥(当前程序已运行)
- 【彩蛋】小白入门学习 SQL 数据库基础视频教程(109个视频)
- 驱动该如何入门 关于file_operations和Linux设备模型
- 华为端口聚合命令_华为汇聚交换机链路聚合配置命令
- win10 安装SQL Server 2005--以及---安装SQL2005之后卸载,重新安装时提示“安装默认报表服务器的必备组件检查失败”的方法
- hfss matlab api,HFSS-Matlab-API实践体会与HFSS Scripting快速入门
- 谭浩强c语言程序设计笔记讲义,【笔记】谭浩强C语言程序设计--简明笔记
- 使用visual studio code 编写小程序代码