1.比较arm指令系统的特点。
arm指令系统属于risc指令系统。标准的arm指令每条都是32位长,有些arm核还可以执行thmub指令集,该指令集是arm指令集的子集,每条指令只有16位。
1.每条指令的多功能。
arm指令一个重要的特点是它所有的指令都带有条件,例如用户可以测试某个寄存器的什但是直到下次使用同一条件进行测试时,才能有条件的执行这些指令。arm指令另一个重要的特点是具有灵活的第2操作数,既可以是立即数,也可以是逻辑运算数,使得arm指令可以在读取数值的同时进行算术和移位操作。它可以在几种模式下操作,包括通过使用swi(软件中断)指令从用户模式进入系统模式。
2.协处理器的作用。
arm内核可以提供协处理器指令接口,通过扩展协处理器完成复杂的功能,因此,arm指令还包含了多条协处理器接口,使用多达16个协处理器;允许将其他处理器能过协处理器接口进行耦合;还包括几种内丰管理单元的变种;包括简单的内存保护到复杂的内存保护到复杂的页面层次。例如,管理存储部件mmu就是arm内核通过协处理器cp15实现对内存的管理。
指令。arm有两种指令集:16位thumb指令集和32位arn指令集。
使用16位的存储器可以降低成本,在这种情况下,thumb指令集的整体执行速度比32位指令集快,而且提高了**密度,所以一般用thumb编译器将c语言程序编译成16位的**。处理器一开始总在arm状态,可使用bx指令转换到thumb状态。
4.具有risc指令的特点。
由于arm指令属于risc指令,所以具有risc指令的特点,指令少,且等长,便于充分利用流水线技术;使用多寄存器,且多为简单的load与store指令(从内存中读取某个值,执行完操作后再将其放回内存)。
5.立即数和直接地址。
由于指令统一为32位,无法在1条指令中存放32位立即数。一般立即数为5~12位。采用一些特殊的方法,使它能处理立即数。
同理,直接(或相对)地址一般为24位,但由于指令地址的低2位为00,故寻地范围为±226,相对地址为±225。
2.编写一个arm的汇编程序,要求。
1)**量至少100条;(2)程序流程图或注释;(3)截屏,反映程序运行结果。
解:1)程序功能的基本介绍:
将0~100之间的10个成绩存入首址为1000h的单元中。1000h+i表示学号为i的学生成绩,编写程序能在2000h开始的区域排出名次表。2000h+i为学号i的学生的名次。
2)程序流程图如下:
主程序如下:
入口。段寄存器和堆栈初始化。
显示“请输入10个学生的成绩”
si指向成绩表首址。
学生数送cx
调getnum,读学生成绩送[si]中。
si加1指向下一单元。
cx减1为0? n
y学生数送cx
di指向名次表首址。
计算名次填入dx学号。
对应的名次表单元。n n y
调disp1,显示
排定的学生名次。
程序scan:
cx入栈保存。
学生数送cx
al中放最低成绩00h
bx和si均指向成绩表首址。
al≥[si]? y
n[si]送al中,dx记录对应学号。
si加1指向下一单元。
n cx减1为0?
y将本次扫描成绩最高者清0
cx 出栈。
返回。3)**及注释如下:
crlf macro
mov ah,02h
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
endmdata segment
stunum equ 10
mess1 db 'please enter the order number of students grades1-10:',0dh,0ah,'$
error db 'input error,please try again: '0dh,0ah,'$
mess2 db '1-10 student rank order:',0dh,0ah,'$
emark db
org 1000h 定义源成绩存放的地址1000h
score db 30 dup(?)定义成绩数组,长度为30个字节,初始值为任意值。
org 2000h 定义名次表存放的首地址2000h
sequ db 30 dup(?)定义名次表数组,长度为30个字节,初始值为任意值。
data ends
stack segment
sta dw 32 dup(?)
top dw ?
stack ends
code segment
assume cs:code,ds:data,es:data,ss:stack
start: mov ax,data
mov ds,ax
mov es,ax
mov sp,top
mov ah,09h
mov dx,offset mess1 显示提示信息。
int 21h
mov si,offset score ;成绩表首址送si
mov cx,stunum ;学生数送cx
mov emark,0错误标志置零。
uuu: call getnum读取键入数值送dx,每次读入一个成绩。
cmp emark,01h错误标志与1进行比较。
je start如果等于1,则表示输入出错,程序重新开始;
mov [si],dl存入成绩表缓冲区中。
inc si指向下一单元。
loop uuu未读完成绩,继续读。
mov cx,stunum ;学生数。
mov di,offset sequ ;名次表首址。
vvv: call scan调用扫描子程序。
mov al,stunum ;学生数。
sub al,cl总人数-剩下的人数=名次。
inc al计算名次。
mov bx,dxdx所对应的学号送bx
mov [di+bx],al ;记dx学号对应名次。
loop vvv未完,继续。
mov ah,09h
lea dx,mess2显示提示信息。
int 21h
mov cx,stunum ;学生数。
mov si,offset sequ ;名次表首址。
www: mov al,[si] 把[si]中的名次送al
call dispi调用显示子程序。
push dxdx进栈保护。
push axax进栈保护。
mov ah,02
mov dl,20h显示空格。
int 21h
pop ax恢复ax
pop dx恢复dx
inc si名次表地址加1
loop www未完继续 ,完成后所有显示排定的学生名次。
mov ax,4c00h 程序结束,退出主程序。
int 21h
scan proc near ;子程序,每扫描一遍成绩表缓冲区, 找出其成绩最高者。
由dx指针指示对应学生),之后将该成绩清除以便下一次扫描。
push cxcx进栈保护。
mov cx,stunum学生数。
mov al,00h最低成绩。
mov bx,offset score 成绩表首地址送bx
mov si,bxsi指向成绩表首址。
ccc: cmp al,[si
jae jjj ;al中的成绩不低于(大于或等于)成绩表指针si所指单元的成绩则转jjj
mov al,[sial存放较高的成绩。
mov dx,si较大成绩所对应的成绩表中的地址送dx
sub dx,bxdx记录较大成绩对应的学号(dx-bx dx)
jjj: inc si指向下一单元。
loop ccc未完,继续比较。
add bx,dx恢复最高成绩在成绩表中的地址。bx+dx bx
mov byte ptr [bx],00h ;将本次扫描成绩最高者清0
pop cx恢复cx
retscan endp
dispi proc near显示子程序。
push cx
mov bl,al
mov dl,bl
mov cl,04 显示高4位。
rol dl,cl
and dl,0fh
call displ
mov dl,bl
嵌入式作业
电力设备测控系统中的总线通讯协议实现。程俊 200910302013 一 程序实现的功能 嵌入式系统作为测控系统主机,依次每隔30秒获取设备数据,发送给各个传感器。1 程序实现是通个定义的一个数组,然后数组中分别放入 起始标记aa 设备类型 设备编号 数据发送请求55 校验位这里采用求和校验,而将第...
嵌入式作业
专业 电子信息工程班级 电信10 1 任课教师 姓名 学号成绩。题目 查阅相关资料,你认为选用哪一种硬件 芯片 和软件比较适合本专业的要求?为什么?答 个人觉得选用三星的6410芯片更适合本专业的要求,6410对比与2440不会更容易被淘汰,而且现在6410有很多开发板可以供我们自学,比如飞凌的ok...
嵌入式作业
include 基本系统数据类型。include 提供socket函数及数据结构。include 标准输入输出。include 标准库。include 提供错误号errno的定义,用于错误处理。include 字符串函数定义。include read函数 write函数和getpid函数等头文件。i...