提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、示例代码
  • 二、代码分析
    • 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


总结

汇编语言源程序基础分析--跑马灯相关推荐

  1. 汇编语言比C51需要效率高,汇编语言与C51语言实现跑马灯实验的比较 -

    当前开发单片机应用系统程序主要应用汇编语言和C51语言,采用汇编语言编写可直接操纵系统的硬件资源,能编写出高效运行的程序代码,程序运行速度快.而采用C51语言编写可改善程序的可读性和可移植性,利于产品 ...

  2. 使用POTEUS软件来进行模拟仿真 8086汇编语言花式跑马灯课程设计及代码

    一.设计目的 通过本次课程设计让我们进一步深入汇编语言的学习,掌握简单的接口设计技术,将理论知识与实际相联,更进一步地深入学习8255A.8086.8253等芯片的相关知识,以及学习使用POTEUS软 ...

  3. linux arm中断跑马灯,S3C2410 MDK实验---ARM汇编语言实现跑马灯

    具体思路: 由于开发板是将GPF4-7与灯相连,所以通过设置GPFCON控制寄存器将将LED灯相连的引脚4,5,6,7设置为输出功能,将他们的上拉电阻设置为禁用(设置GPFUP为0),通过修改GPFD ...

  4. 8255控制四个双色灯C语言,汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮...

    最后改进代码: .MODELTINY .STACK100 .DATA ledshow DB 11111110B ;数据段定义变量按"变量名 数据类型 数据";DB为字节型 seve ...

  5. s3c2440芯片累加汇编语言,s3c2440 --跑马灯 C+汇编代码

    原标题:s3c2440 --跑马灯 C+汇编代码 /*_asm_c.c*/ #rGPFCON (*(volatile unsigned *)0x56000050) //Port F control # ...

  6. c语言跑马灯实验报告,单片机跑马灯实验

    一.实验目的 1. 熟悉HNIST-2型单片机系统相关硬件电路,程序下载方法: 2. 掌握采用汇编语言与C语言开发单片机系统的程序结构: 3. 掌握51系列单片机通用I/O口的使用. 二.实验前准备 ...

  7. c语言程序设计点亮第一个LED,实验2__C语言程序设计及_LED跑马灯实验.ppt

    实验2__C语言程序设计及_LED跑马灯实验 软件工程系 实验目的 进一步熟悉ADS开发环境,并能进行相关设置 熟悉裸机系统下C语言运行环境的设置方法. 掌握ADS下C语言程序的编辑.编译.链接及下载 ...

  8. 单片机实现跑马灯c语言程序,用单片机编写几种跑马灯程序

    任务: 1.在电路板上实现跑马灯,一次1匹 2.在电路板上实现跑马灯,一次2匹 3.在电路板上实现4个二极管的同时闪烁 源程序1: /********************************* ...

  9. 单片机按键启停c语言,ZigBee-CC2530单片机 - 按键控制跑马灯的启停

    ZigBee-CC2530单片机 - 按键控制跑马灯的启停 程序源码 #include "ioCC2530.h" //引用CC2530头文件 #define LED1 (P1_0) ...

  10. c语言编写单片机跑马灯,用单片机编写几种跑马灯

    任务: 1.在电路板上实现跑马灯,一次1匹 2.在电路板上实现跑马灯,一次2匹 3.在电路板上实现4个二极管的同时闪烁 源程序1: /********************************* ...

最新文章

  1. php微信级联菜单,php微信公众号开发之二级菜单
  2. 服务器不显示磁盘柜,磁盘柜与服务器的关系
  3. Linux查看本机外网ip
  4. Python 测试开发教程
  5. Python常见十六个错误集合,你知道那些?
  6. iis7怎么安装php7,Linux下如何安装php7
  7. RLock vs Lock
  8. javascript 库_您应该在2020年尝试的10个很棒JavaScript库
  9. 网易北京:全员核酸检测为阴性 园区环境检测为阴性
  10. python入门——P43魔法方法:算数运算2
  11. 缠论k线合并处理python实现_缠论期货:道琼斯工业指数缠论分解体系5F趋势背驰,3买能否构筑成功?...
  12. Parse分析之 -- Enum.Parse
  13. Matlab归一化方法
  14. (附源码)计算机毕业设计ssm电商后台管理系统
  15. WGS84经纬度坐标与北京54坐标或者西安80坐标的关系-3
  16. 做个合格的吃货~利用Python爬取美食网站3032个菜谱并分析
  17. 【TencentOS tiny学习】源码分析(6)——互斥锁
  18. JS实现京东表单注册
  19. 爬虫入门必学——常见的几种网站类型
  20. 关于极光推送报错6003的一些问题

热门文章

  1. qt结合arcgis进行开发
  2. 2021年高考成绩查询海南时间,2021年海南高考后多久出成绩,附海南高考成绩查询时间入口方式...
  3. 进程互斥(当前程序已运行)
  4. 【彩蛋】小白入门学习 SQL 数据库基础视频教程(109个视频)
  5. 驱动该如何入门 关于file_operations和Linux设备模型
  6. 华为端口聚合命令_华为汇聚交换机链路聚合配置命令
  7. win10 安装SQL Server 2005--以及---安装SQL2005之后卸载,重新安装时提示“安装默认报表服务器的必备组件检查失败”的方法
  8. hfss matlab api,HFSS-Matlab-API实践体会与HFSS Scripting快速入门
  9. 谭浩强c语言程序设计笔记讲义,【笔记】谭浩强C语言程序设计--简明笔记
  10. 使用visual studio code 编写小程序代码