汇编语言

ARM汇编语言学习笔记(二)跑个灯程序以及.s文件分析

ⅰ亾dé卋堺 提交于 2020-01-01 12:46:37
目录 一、汇编语言怎么写 二、写一个试试 三、分析 1、启动 2、配置GPIO 3、设置GPIO的电平 4、死循环 四、编译 1、安装linux虚拟机和arm-gcc-linux工具链。 2、编写makefile 3、make编译: 五、成功 一、汇编语言怎么写 我们都知道,c语言可以写成c语言然后编译。那么汇编语言了? 汇编语言用汇编语言写,然后写出来为.s文件。所以我们只需要任意一款可以编写.s文件的编辑器就可以啦,例如:source insight、notepad等。 二、写一个试试 /* * 点亮LED1: gpf4 */ . text . global _start _start : /* 配置GPF4为输出引脚 * 把0x100写到地址0x56000050 */ ldr r1 , = 0x56000050 ldr r0 , = 0x100 /* mov r0, #0x100 */ str r0 , [ r1 ] /* 设置GPF4输出高电平 * 把0写到地址0x56000054 */ ldr r1 , = 0x56000054 ldr r0 , = 0 /* mov r0, #0 */ str r0 , [ r1 ] /* 死循环 */ halt : b halt 三、分析 说实话,我一开始看着这些代码,我也蒙。 后来看了别人的分析才知道是啥: 1、启动

汇编语言从键盘接收字符串并在屏幕显示

折月煮酒 提交于 2020-01-01 09:49:16
上代码 data segment msg db 13,10,'input string ',13,10,13,10,'$' data1 db 13,10,13,10 data2 db 20 dup('$') data ends code segment assume cs:code , ds:data start: mov ax,data mov ds,ax mov dx,offset msg mov ah,9 int 21h ;-------------------------输出提示信息 mov di , offset data2 lop: mov ah,1 int 21h cmp al,13 jz exit mov [di],al inc di cmp di,offset data2+20 jz exit jmp lop ;----------------------------循环输入 exit: mov dx,offset data1 mov ah,9 int 21h ;----------------------------显示输入字符串 mov ah,4ch int 21h ;----------------------------程序结束 code ends end start 来源: CSDN 作者: 牛小聪 链接: https://blog.csdn.net

【汇编语言与计算机系统结构笔记04】80x86计算机组织、保护模式、存储器、寄存器、计算机系统结构金字塔

痴心易碎 提交于 2019-12-30 20:13:04
本次笔记内容: 05.80x86计算机组织 文章目录 计算机系统 存储器 / 主存(main memory) 80x86处理器与保护模式 历史 8086 / 8088 微处理器 80186和80286微处理器 80286 CPU基本工作方式 32位80x86微处理器 80386微处理器 80x86的三种工作模式 32位微处理器的寄存器 保护模式下的80x86(段模式) 寄存器与处理器的比较 计算机体系结构金字塔 计算机系统 如上图,CPU与主存间,通过一个bridge(总线)相连。上图还是比较抽象的,当前,CPU的一个趋势是,集成程度越来越高。 CPU中,PC即当前指令的地址,ALU是arithmetic and logic unit即计算路径。目前Memory Control、集成显卡等已经集成到CPU中了。 现在即便集成度(晶体管)提升,但性能并没有提升。因为程序往往是串行的,并行性有限。 上图中,在代码被从Disk中load到主存中,被CPU处理,再把信息投入显示器。 存储器 / 主存(main memory) 存储单元的地址和内容: 存储器以字节(8 bit)为单位存储信息; 每个字节单元有一个地址,从0编号,顺序加1; 地址用二进制数表示(无符号整数,写成十六进制); 一个32位字要占用相继的四个字节,低位字节存入低地址,高位字节存入高地址; 机器以字对齐地址访问(读/写

编写一个汇编语言程序,完成以下要求。从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元

给你一囗甜甜゛ 提交于 2019-12-28 09:30:46
编写一个汇编语言程序,完成以下要求。从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元中(假设这10个数的和值不超过16位范围) P176 4.12 编程思路:首先DATA段中,定义BUF为DW数据类型,因为存在带符号字数据,N为记录BUF的数据总个数,MAX为DW数据类型存放最大值,AVE为DB数据类型且占用两个物理单元,分别存放平均值的整数部分和小数部分;接着,使用SI获取BUF的有效地址,AX存放以次存放BUF中的数据,并且与下一个数据进行比较大小,若AX小于[SI]则将大的值[SI]赋值给AX,否则进行[SI+2]下一个数据进行与AX比较,AX始终存放BUF数据中的最大值;CX存放数据的总个数,DX依次存放BUF的数据相加之和;最后,将总数据之和/总个数=商(平均分的整数部分)存放在AVE中,余数(平均分的小数部分)存放在AVE+1中。 代码如下: DATA SEGMENT BUF DW - 1 , 3 , 24 , 94 , 62 , 72 , 55 , 0 , - 48 , 99 N EQU ( $ - BUF ) / 2 ; 由于定义的BUF为DW字类型,每个数据占两个物理单元,最后个数除以二,这里的N为BUF的长度 MAX DW ? ;

8086CPU指令系统--汇编语言数据转送指令(MOV,PUSH/POP,LEA)

人盡茶涼 提交于 2019-12-25 22:50:07
通用的数据转送指令MOV: 指令格式: MOV dest,src ;dest←src 功能:将源操作数的内容送至目的操作数。MOV指令对各标志位无影响。在MOV指令中,两个操作数可以是字,也可以是字节,但两者必须登长。 注意: 段寄存器CS只能做源操作数,不能做目的操作数 源操作数和目的操作数不能同时为存储单元操作数 立即数不能直接传送给段寄存器,且不同段寄存器之间不能进行传送 MOV AX,BX ;将寄存器BX的数据传送给AX MOV [3000H],DX ;将DX中的数据传送到存储器3000H单元 MOV [SI],DS ;将DS内容传送到SI所指示的单元 堆栈操作指令PUSH/POP 指令格式: PUSH src ;SP←(SP)-2,(SP)+1:(SP)←(src) POP dest ;dest←[(SP)+1:(SP)],SP←(SP)+2 功能:对堆栈的信息进行存取,不影响标志位,常用于子程序的调用和返回过程中保存程序中的某些信息 注意: 堆栈的使用要遵循LIFO的准则 堆栈中的操作数均为自操作数,不能为字节操作数 PUSH指令可以使用CS寄存器,但POP指令不允许使用CS寄存器 8086/8088CPU堆栈操作可以使用除立即寻址以外的任何寻址方式 PUSH AX ;若给定(SP)=00F8H,(SS)=2500H, ;执行之后(SP)=00F6H,(250F6H)

Linux 引导启动程序(boot)

让人想犯罪 __ 提交于 2019-12-23 13:50:20
主要描述 boot/ 目录中的三个汇编代码文件,见列表 3-1 所示。正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式。 bootsect.s 和 setup.s 采用近似于 Intel 的汇编语言语法,需要使用 Intel 8086 汇编编译器和连接器 as86 和 ld86 ,而 head.s 则使用 GNU 的汇编程序格式,并且运行在保护模式下,需要用 GNU 的 as 进行编译。这是一种 AT&T 语法的汇编语言程序。 使用两种编译器的主要原因是由于对于 Intel x86 处理器系列来讲, GNU 的编译器仅支持 i386 及以 后出的 CPU 。不支持生成运行在实模式下的程序。 阅读这些代码除了你需要知道一些一般 8086 汇编语言的知识以外,还要对采用 Intel 80X86 微处理器的 PC 机的体系结构以及 80386 32 位保护模式下的编程原理有些了解。所以在开始阅读源代码之前可以先大概浏览一下附录中有关 PC 机硬件接口控制编程和 80386 32 位保护模式的编程方法,在阅读代码时再就事论事地针对具体问题参考附录中的详细说明。 这里先总的说明一下 Linux 操作系统启动部分的主要执行流程。当 PC 的 电源打开 后, 80x86 结构的 CPU 将 自动进入实模式 ,并 从地址 0xFFFF0 开始自动执行程序代码

编写一个汇编语言程序,将字符串"Hello World"中的全部小写字母转换为大写字母,并存放回原地址处。

两盒软妹~` 提交于 2019-12-22 21:45:21
编写一个汇编语言程序,将字符串"Hello World"中的全部小写字母转换为大写字母,并存放回原地址处。 P176 4.10 编程思路:首先DATA段中,定义string存放字符串"Hello World",LEN为字符串string长度;其次,BX获取string的有效地址,将string存放的字符串赋值给AL,通过AL进行与’a’和’z’这个范围进行比较,若在该范围表示为小写字母,则需要转换为大写字母,即AL-20H(小写字母要比大写字母所对应的ASCII码值大20H),所以AL-20H就是小写字母所对应的大写字母。 代码如下: DATA SEGMENT string DB "Hello World!" ; 将需要转换的字符串存放到string中,定义类型为DB型 LEN EQU $ - string ; 等值伪指令EQU,将LEN表示string的长度 DATA ENDS CODE SEGMENT ASSUME CS : CODE , DS : DATA START : MOV AX , DATA ; 由于DATA为立即数,不能用赋值给段寄存器DS,需要借助AX通用寄存器 MOV DS , AX ; 将AX赋值给DS MOV BX , OFFSET string ; BX获取string的有效地址用于取出string中的字符串 MOV CL , LEN ;

汇编语言||8086/88的中断向量表

蓝咒 提交于 2019-12-22 19:25:07
中断向量表: 用来存放中断码对应中断处理程序的入口地址,一个地址包括段地址和偏移地址,高地址存放段地址,低地址存放偏移地址 需要四个字节来存储中断处理程序的入口地址,256个中断信号处理程序需要1024个字节来存储 8086CPU中断向量表存放在0地址处开始的1024个存储单元中,地址为0000:0000~0000:03FF 来源: CSDN 作者: Jock.Liu 链接: https://blog.csdn.net/JockLiu/article/details/103654836

王爽《汇编语言》实验7

我的未来我决定 提交于 2019-12-22 08:39:38
DATAS SEGMENT DB '1975','1976','1977','1978','1979','1980','1981','1982','1983' DB '1984','1985','1986','1987','1988','1989','1990','1991','1992' DB '1993','1994','1995' DD 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 DD 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 DW 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 DW 11542,14430,15257,17800 DATAS ENDS TABLES SEGMENT DB 21 DUP ('year summ ne ?? ') TABLES ENDS STACKS SEGMENT STACK DW 8 DUP(0) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV AX,TABLES

day02

社会主义新天地 提交于 2019-12-21 02:22:28
什么是编程? 编程就是通过一些编程语言写一堆文件,表达自己的想法 简述计算机五大组成。 控制器、运算器、存储器、输入设备、输出设备 操作系统有什么用? 操作系统位于应用程序和硬件之间,负责协调管理计算机资源和软件资源。操作系统把对硬件的复杂性,封装成一个个简单易用的接口供人们使用。 计算机由哪三大部分组成? 硬件,与硬件直接交互 操作系统(软件),与硬件交互 应用软件,与操作系统交互 简述操作系统和应用程序的启动流程? 操作系统启动流程: 开机,启动临时操作系统 临时操作系统去CMOS存储器上寻找操作系统的存储路径 操作系统启动,临时操作系统关闭 应用程序启动流程: 双击应用程序图标 双击图标就是给操作系统指令,告诉操作系统应用程序在硬盘的位置,让操作系统启动这个路径 操作系统接到指令操控CPU,给内存发指令 内存接受CPU指令,给硬盘发出指令,硬盘读取应用程序代码至内存,应用程序启动 编程语言的分类有哪些?并评估各个分类的优缺点。 机器语言 优点:执行速度非常快,直接和硬件交互 缺点:开发速度非常慢 汇编语言 优点(相较于机器语言而言):开发速度快 缺点(相较于机器语言而言):执行速度慢 高级语言 优点(较于汇编语言):开发效率高 缺点(较于汇编语言):执行效率低(调试bug非常复杂) 编译型语言 优点(较于解释型语言):执行效率高 缺点(较于解释型语言):开发效率低 解释型语言