逻辑地址是由:16位段选择符 32位偏移量组成。 对逻辑地址的访问权和访问范围都要给以检查。若通过检查,则 32位偏移量+基地址→线性地址。
一个逻辑地址由两部份组成,段标识符和段内偏移量。段标识符是由一个16位长的字段组成,称为段选择符。其中前13位是一个索引号。
android应用开发框架是ApplicationFramework其系统架构由5部分组成,分别是:LinuxKernel、AndroidRuntime、Libraries、ApplicationFramework、。第二部分将详细介绍这5个部分。下面自底向上分析各层。
Android架构
1、LinuxKernelAndroid
基于Linux26提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux
Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生
了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(ServiceAessPoint),专业点可以说是高内聚、低耦合。
如果你只是做应用开发,就不需要深入了解LinuxKernel层。
2、AndroidRuntimeAndroid
包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己
的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是dex,dex格式是专为Dalvik
设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机
器指令更大。dx是一套工具,可以将Javaclass转换成dex
格式。一个dex文件通常会有多个class。由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。
Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。
3、LibrariesAndroid
包含一个C/C库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application
framework)暴露给开发者。下面列出一些核心库:系统C库--标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备
媒体库--基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、
H264、MP3、AAC、AMR、JPG、PNG界面管理--管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层
LibWebCore--新式的Web浏览器引擎,驱动Android浏览器和内嵌的web视图SGL--基本的2D图形引擎
3D库--基于OpenGLES10APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅FreeType
--位图和矢量字体渲染SQLite--所有应用程序都可以使用的强大而轻量级的关系数据库引擎
4、ApplicationFramework
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。所有的应用程序其实是一组服务和系统,包括:视图(View)--丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提供者(ContentProviders)--使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据资源管理器(ResourceManager)--提供访问非代码资源,如本地化字符串、图形和布局文件通知管理器(Manager)--使所有的应用程序能够在状态栏显示自定义警告活动管理器(ActivityManager)--管理应用程序生命周期,提供通用的导航回退功能
5、Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发!从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆迭(Softwaretack),或称为「软件迭层架构」,迭层主要分成三层: *** 作系统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。
android应用开发框架是ApplicationFramework其系统架构由5部分组成,分别是:LinuxKernel、AndroidRuntime、Libraries、ApplicationFramework、。第二部分将详细介绍这5个部分。下面自底向上分析各层。
Android架构
1、LinuxKernel
Android基于Linux26提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。LinuxKernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(ServiceAessPoint),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解LinuxKernel层。
2、AndroidRuntime
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx是一套工具,可以将Javaclass转换成dex格式。一个dex文件通常会有多个class。由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。
3、Libraries
Android包含一个C/C库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(applicationframework)暴露给开发者。下面列出一些核心库:系统C库--标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备媒体库--基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H264、MP3、AAC、AMR、JPG、PNG界面管理--管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层LibWebCore--新式的Web浏览器引擎,驱动Android浏览器和内嵌的web视图SGL--基本的2D图形引擎3D库--基于OpenGLES10APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅FreeType--位图和矢量字体渲染SQLite--所有应用程序都可以使用的强大而轻量级的关系数据库引擎
4、ApplicationFramework
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。所有的应用程序其实是一组服务和系统,包括:视图(View)--丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提供者(ContentProviders)--使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据资源管理器(ResourceManager)--提供访问非代码资源,如本地化字符串、图形和布局文件通知管理器(Manager)--使所有的应用程序能够在状态栏显示自定义警告活动管理器(ActivityManager)--管理应用程序生命周期,提供通用的导航回退功能
5、
Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发!从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆迭(SoftwareStack),或称为「软件迭层架构」,迭层主要分成三层: *** 作系统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。
18086汇编语言指令由标号、 *** 作码、 *** 作数和注释组成,其中标号和注释可以省略, *** 作码指出指令要过盛的功能, *** 作数指出完成的对象
2变量和标号的区别是变量由伪指令定义,标号是指令前面的符号,变量也伪指令定义符之间由空格分隔,标号与指令助词符之间由冒号分隔。
3开发汇编语言源程序的主要步骤有分析问题、确定算法、画流程图、写代码、调试。
4汇编语言源程序的一般结构为:
;程序模板
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0) ;初始化堆栈大小为100
SSEG ENDS
DSEG SEGMENT
;数据段:在此处添加程序所需的数据
DSEG ENDS
ESEG SEGMENT
;附加段:在此处添加程序所需的数据
ESEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:ESEG, ss:SSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
mov ax,eseg
mov es, ax
;此处添加主程序代码
;按任意键退出
mov ah,1
int 21h
mov ax, 4c00h ;程序结束,返回到 *** 作系统系统
int 21h
MAIN ENDP
CSEG ENDS
END MAIN
5说明写列语句所分配的存储空间及初始化的数据值
(1)BYTE_VAR DB 'BYTE',21,-42H,3DUP(0,,2DUP(2,3),)
为变量BYTE_VAR分配了27个字节空间,初始化的数据值依次为: 42H,59H,54H,45H,15H,BEH,00H,00H,02H,03H,02H,03H,00H,00H,00H,02H,03H,02H,03H,00H,00H,00H,02H,03H,02H,03H,00H
(2)WORD_VAR DW 5DUP(4,2,0),,-8,'BY','TE',256H
为变量WORD_VAR定义了20个字空间,初始化的数据值依次为:
04H,00H,02H,00H,00H,00H,04H,00H,02H,00H,00H,00H,04H,00H,02H,00H,00H,00H,00H,00H,F8H,FFH,59H,42H,45H,54H,56H,02H
附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。
段寄存器
CS IP
SS SP或BP
DS BX、DI、SI
ES DI(用于串指令)
汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替 *** 作码,用地址符号(Symbol)或标号(Label)代替地址码。
这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。
用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。
一、编写程序,将一个包含20个元素的数组STRING分成一个偶数数组STRING1和一个奇数数组STRING2
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
STRING db 230,69,89,35,46,57,68,79,51,81,98,43,56,19,123,98,102,87,65,156
STRING1 db 20 dup(0) ;偶数数组
STRING2 db 20 dup(0) ;奇数数组
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
lea si,STRING ;取数组变量地址
lea di,STRING1 ;偶数数组地址
lea bx,STRING2 ;奇数数组地址
mov cx,20 ;元素个数
cld
Partition: lodsb ;读入一个元素
test al,1 ;偶数?
jnz $+5 ;不是
stosb ;保存到偶数数组
jmp $+5
mov [bx],al ;保存到奇数数组
inc bx
loop Partition
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
二、分析下面程序段的功能,并利用完整段定义框架或简化段定义框架将该程序段做成完整的程序,并通过CodeView看到实验结果。
MOV DX,0
LOP1:MOV AH1从键盘接收一个字符,字符的ASCII码在AL中
INT 21H
CMP AL,'$'
JZ NEXT
CMP AL,30H
JB LOP1
CMP AL,39H
JA LOP1
AND AL,0FH
ADD DL,AL
ADC DH,0
JMP LOP1
NEXT: HLT
1、程序功能
键盘输入字符,若为数字,将其转换成二进制数,然后累加到DX寄存器;否则,重新输入字符,直至输入字符为$,暂停。
2、完整程序
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
Start: push cs
pop ds ;使数据段与代码段同段
MOV DX,0
LOP1:MOV AH,1从键盘接收一个字符,字符的ASCII码在AL中
INT 21H
CMP AL,'$'
JZ NEXT
CMP AL,30H
JB LOP1
CMP AL,39H
JA LOP1
AND AL,0FH
ADD DL,AL
ADC DH,0
JMP LOP1
NEXT:HLT
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
以上就是关于附加段的逻辑地址由什么组成全部的内容,包括:附加段的逻辑地址由什么组成、Android手机应用开发一般采用什么框架_安卓框架是什么、安卓app开发框架哪些csdn(安卓开发框架有哪些)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)