linux系统和windows系统的汇编有什么区别?

linux系统和windows系统的汇编有什么区别?,第1张

DOS/Windows 下的汇编语言代码都是 Intel 风格的。但在 Unix 和 Linux 系统中,更多采用的还是 AT&T 格式,两者在语法格式上有着很大的不同:

在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。例如:

AT&T 格式 pushl %eax

Intel 格式 push eax

在 AT&T 汇编格式中,用 '$' 前缀表示一个立即 *** 作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。例如:

AT&T 格式 pushl $1

Intel 格式 push 1

AT&T 和 Intel 格式中的源 *** 作数和目标 *** 作数的位置正好相反。在 Intel 汇编格式中,目标 *** 作数在源 *** 作数的左边;而在 AT&T 汇编格式中,目标 *** 作数在源 *** 作数的右边。例如:

AT&T 格式 addl $1, %eax

Intel 格式 add eax, 1

在 AT&T 汇编格式中, *** 作数的字长由 *** 作符的最后一个字母决定,后缀'b'、'w'、'l'分别表示 *** 作数为字节(byte,8 比特)、字(word,16 比特)和长字(long,32比特);而在 Intel 汇编格式中, *** 作数的字长是用 "byte ptr" 和 "word ptr" 等前缀来表示的。例如:

AT&T 格式

movb val, %al

Intel 格式 mov al, byte ptr val

在 AT&T 汇编格式中,绝对转移和调用指令(jump/call)的 *** 作数前要加上'*'作为前缀,而在 Intel 格式中则不需要。

远程转移指令和远程子调用指令的 *** 作码,在 AT&T 汇编格式中为 "ljump" 和 "lcall",而在 Intel 汇编格式中则为 "jmp far" 和 "call far",即:

AT&T 格式 ljump $section, $offset lcall $section, $offset

Intel 格式 jmp far section:offset call far section:offset

与之相应的远程返回指令则为:

AT&T 格式 lret $stack_adjust

Intel 格式 ret far stack_adjust

在 AT&T 汇编格式中,内存 *** 作数的寻址方式是

section:disp(base, index, scale)

而在 Intel 汇编格式中,内存 *** 作数的寻址方式为:

section:[base + index*scale + disp]

由于 Linux 工作在保护模式下,用的是 32 位线性地址,所以在计算地址时不用考虑段基址和偏移量,而是采用如下的地址计算方法:

disp + base + index * scale

下面是一些内存 *** 作数的例子:

AT&T 格式 Intel 格式

movl -4(%ebp), %eax mov eax, [ebp - 4]

movl array(, %eax, 4), %eax mov eax, [eax*4 + array]

movw array(%ebx, %eax, 4), %cxmov cx, [ebx + 4*eax + array]

movb $4, %fs:(%eax) mov fs:eax, 4

医院计算机五大应用系统

一般来说分以下几大类应用系统:

系统管理平台(SMS)

临床资讯系统(CIS)

病人管理系统(PAS)

临床工作站系统(CWS)

管理资讯系统(MIS)

决策支援系统(DSS)

知识管理系统(KMS)

公共应用服务(CAS)

协作互动支援服务(TES)

也有医院按各应用系统模组分法,常见的有:

HIS (Hospital Information System) 医院资讯系统

CIS (Clinical Information System) 临床资讯系统

LIS (Laboratory Information System)实验室(检验科)资讯系统

PACS (Picture Archiving and Communication Systems) 影像归档和通讯系统

RIS (Radiology Information System) 放射科资讯管理系统

EMR (Electronic Medical Record) 电子病历

OA (Office Automation) 办公自动化

CRM (Customer Relationship Management)客户关系管理

PEIS (Physical Examination Information System) 体检资讯系统

ORIS (Operation Room Information System) 手术室资讯系统

CCIS (Critical Care Information System) 重症监护资讯系统

WMIS (Wireless Medical Information System) 无线医疗资讯系统

计算机网路有哪五大应用?

强大的功能极大地推动了因特网的发展和普及,它可以使一个从没有用过计算机的人,几分钟内就可以学会浏览网上丰富多彩的多媒体资讯。您只需要用滑鼠点选一下相关题目和照片就可以从一个网站进入另一个网站,从一个国家进入另一个国家,坐在家中就可轻松漫游全球。

电子邮件(E-MAIL):是计算机与通讯相结合的产物,主要用于计算机使用者之间交换电子信件。发信者在计算机上输入发信档案内容,存入发信方信箱中,借助通讯网路将放在发信方信箱中的信件传送到收信方信箱中,当收信人开启自己的计算机,借助通讯网路便可开启收方信箱,阅读发方传来的信件。在网际网路众多的应用中,电子邮件无疑是其中最受欢迎的一个。 无论您住在天涯,还是住在海角,通过可爱的"伊妹儿",我们便可以方便地通讯联络。噢!远在大洋彼岸的哥哥生日到了,赶快给他"E-MAIL"一张贺卡,再附上一段家人的嘱咐和期望,短短几分钟便飞到了他的手里。回过头来,再算算经济帐,花了不到几毛钱,以后跟哥哥联络再不用为钱发愁! 在拥有了一个电子信箱之后,您还可以使用网路的"新闻订阅"服务。我们将最新的国内、国际新闻,公众服务资讯,娱乐资讯,计算机网路业界资讯,财政证券资讯,热门话题等丰富的内容进行分类收集、整理、加工,按照您指定的订阅需求,定时传送到您的信箱里。拥有了电子信箱,您就拥有了一个称职的秘书,保证让您紧跟时代的潮流!

档案传输(FTP):网上的很多应用软体、游戏、歌曲等档案都是共享并可以免费下载的,您只需登入相关网站,使用FTP协议就可下载所需的档案。

USENET新闻:USENET是一个世界范围的电子公告板,用于释出公告、新闻和各种文章供大家使用。USENET的每个论坛又称为新闻组,如同报纸一样,每篇来稿被看成一篇文章,每个人都可以阅读,每个读过文章的人都可以根据自己的观点发表评论。

远端登入(TELNET):通过使用TELNET,INTERNET上的使用者可以将自己的计算机模拟成一台远端计算机的终端,然后在它上面执行程式,或者使用它的软体和硬体资源。

计算机的应用系统有哪些

一、系统软体

1.作业系统

2.程式语言设计

3.语言处理程式

4.资料库管理程式

5.系统辅助处理程式

二、应用软体

1、文书处理软体

2、资讯管理软体

3、辅助设计软体

4、实时控制软体

我现在大概就知道这么多,希望对你有帮助!

计算机的应用系统包括哪些?

一般由计算机硬体系统、系统软体、应用软体组成。计算机基本硬体系统由运算器和控制器、储存器、外围介面和外围装置组成。系统软体包括作业系统、编译程式、资料库管理系统、各种高阶语言等。应用软体由通用支援软体和各种应用软体包组成。

计算机五大系统?

五大系统?硬体系统吧?

计算机硬体系统由运算器、控制器、储存器、输入装置,输出装置组成

计算机应用系统方面的程式设计题

解:MOV A,R1

MOV R0,A

(2)外部RAM 20H单元内容送R0。

解:MOV R0,#20H

MOVX A,@R0

MOV R0,A

(3)外部RAM 20H单元内容送内部RAM 20H单元。

解:MOV R0,#20H

MOVX A,@R0

MOV @R0,A

(4)外部RAM 1000H单元内容送内部RAM 20H单元。

解:MOV DPTR,#1000H

MOVX A,@DPTR

MOV 20H,A

(5)外部ROM 2000H单元内容送R0。

解:MOV DPTR,#2000H

CLR A

MOVC A,@A+DPTR

MOV R0,A

(6)外部RAM 2000H单元内容送内部RAM 20H单元。

解:MOV DPTR,#2000H

CLR A

MOVC A,@A+DPTR

MOV 20,A

(7)外部RAM 2000H单元内容送外部RAM 20H单元。

解:MOV DPTR,#2000H

CLR A

MOVC A,@A+DPTR

MOV R0, #20H

MOV @R0,A

2-2 已知A=7AH,R0=30H,(30H)=A5H,PSW=81H。问执行以下各指令的结果(每条指令都以题中规定的资料参加 *** 作)。

(1)XCH A,R0 A=30H,R0=7AH, P=0

(2)XCH A,30H A=A5H, (30H)=7AH, P=0

(3)XCH A,@R0 A=A5H, (30H)=7AH, P=0

(4)XCHD A,@R0 A=75H, (30H)=AAH, P=1

(5)SWAPA A=A7H P=1

(6)ADD A,R0 A=AAH Cy=0 OV=1 P=0

(7)ADD A,30H A=1FH Cy=1 OV=0 P=1

(8)ADD A,#30H A=AAH Cy=0 OV=1 P=0

(9)ADDC A,30H A=20H Cy=1 OV=1 P=1

(10)SUBB A,30H A=D4H Cy=1 OV=1 P=0

(11)SUBB A,#30H A=49H Cy=0 OV=0 P=1

(12)DA A A=80H Cy=1 P=1

(13)RL A A=F4H Cy=1 P=1

(14)RLC A A=F5H Cy=0 P=0

(15)CJNE A,#30H,00 A=7AH Cy=0 P=1

(16)CJNE A,#30H,00 A=7AH Cy=1 P=1

2-3 设内部RAM的30H单元内容为40H,即(30H)=40H,还知(40H)=10H,(10H)=00H,埠P1=CAH,问执行以下指令后各有关存贮器单元、暂存器及埠的内容(即R0,R1,A,B,P1,40H,30H及10H单元)。

MOV R0,#30H

MOV A,@R0

MOV R1,A

MOV B,@R1

MOV @R1,P1

MOV P2,P1

MOV 10H,#30H

MOV 30H,10H

解:每条指令执行后的结果依次如下列所示:R0=30H,A=40H,R1=40H,B=10H,(40H)=CAH,P2=CAH,(10H)=20H,(30H)=20H。

由此可知执行后的各单元内容:R0=30H,R1=40H,A=40H, B=10H, P1=CAH, (40H)=CAH,(30H)=20H,(10H)=20H。

2-4 设R0=17H,A=83H,(17H)=34H,问执行以下指令后,A=?

ANL A,#17H

ORL 17H,A

XRL A,@R0

CPL A

解:此题是为了熟悉逻辑运算指令。各条指令的执行结果如下:

A←83H∧17H=10000011∧00010111=03H

(17H) ←34H∨03H=00110100∨00000011=37H

A←03H⊕37H=00000011⊕00110111=34H

A←A=00110100=CBH

所以程式执行后,A=CBH

2-5 试编写程式,将内部RAM的20H,21H,22H三个连续单元的内容依次存入2FH,2EH和2DH单元。

解:此题可以直接用传送指令来完成:

MOV 2FH,20H

MOV 2EH,21H

MOV 2DH,22H

当然也可以用回圈程式来做:

MOV R0,#20H 源资料区首地址

MOV R1,#2FH 目的资料区首地址

MOV R3,#03H 资料块长度

LOOP: MOV A,@R0

MOV @R1,A

INC R0

DEC R1

DJNZ R2,LOOP

SJMP $

2-6 编写程式,进行两个16位数的减法:6F5DH-13B4H。结果存至内部RAM的30H和31H单元,30H存差的低8位。

解:程式如下:

MOV A,#5DH

CLR C

SUBB A,#0B4H

MOV 30H,A

MOV A,#6FH

SUBB A,#13H

MOV 31H,A

SJMP $

由于MCS=51指令系统中,减法指令只能完成带借位减法,所以在开始做减法时,一般都要对进位位Cy清0。

2-7 编写程式,若累加器A的内容分别满足以下条件时,则程式转至LABEL存贮单元。设A中存的是无符号数。

1、A 10

解:此题可直接用比较条件转移指令来完成,有关的程式语句如下:

CJNE A,#0AH,00H

JNG LABEL

比较条件转移指令根据A-0AH的结果来位置Cy的值,只要A 10,减法就不需要借位,即Cy=0。再用一条“JNC”指令就可以决定是否要转移至LABEL。偏移量00H表示比较后无论结果如何都先执行下一条语句。

2、A>10

解:这时如果仍然与0AH比较,则无法区分A >10(要转移)和A=10(不转移)。当然也可以增加其它的指令(如累加器判断零条件转移语句等)来完成所需的功能,但会使语句增多,程式不够简洁。不如直接与0BH(十进位制数11)比较,比较之后A 11都使Cy=0,相当于A>10才使Cy=0。仍用两条语句就能完成所需功能

CJNE A,#0BH,00H

JNG LABEL

3、A 10

解:这种情况与题(2)相似,可直接与11作比较,但这时是Cy=1时才转移。

CJNE A,#0BH,00H

JC LABEL

4、A<10

解:这时只需直接和10作比较即可,与题(1)类似:

CJNE A,#0AH,00H

JC LABEL

2-8 已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H,(26H)=56H。问此时执行RET指令后,SP=?PC=?

解:MCS-51系统中,堆叠是向上生长的,故出栈 *** 作时堆叠指标要减小。执行RET指令的过程如下:

PC15-8 (SP) 即PC15-8=(25H)=34H

SP SP-1 即SP=24H

PC7-0 (SP) 即PC7-0=(24H)=12H

SP SP-1 即SP=23H

结果为:SP=23H,PC=3412H

2-9 若SP=25H,PC=2345H,标号LABEL所在的地址为3456H,问执行长呼叫指令LCALL LABEL后,堆叠指标和堆叠的内容发生什么变化?PC的值等于什么?

解:长呼叫指令完成两个功能:把下一条指令地址堆入堆叠,并把所呼叫子程式的入口地址赋予程式计数器PC。过程如下:

PC PC+3 所以PC=2345H+3=2348H

SP SP+1 所以SP=26H

(SP) PC7-0 所以(26H)=48H

SP SP+1 所以SP=27H

(SP) PC15-8 所以(27H)=23H

PC LABEL 所以PC=3456H

结果应为:SP=27H,(26H)=48H,(27H)=23H,PC=3456H。

2-10 上题的LCALL指令能否直接换成ACALL指令,为什么?如果使用ACALL指令,则可呼叫的地址范围是什么?

解:ACALL指令只能在2K位元组范围内呼叫。具体来讲,要求PC+2后,PC的高5位与呼叫地址LABEL的高5位相同。或者说执行ACALL以后的PC值和呼叫地址应在同一页内(每页地址范围为2K位元组)。在本题中:

PC+2=2345+2=2347H,高5位00100

而 LABEL=3456H, 高5位00110

两者不相等,不在同一页内,所以不能直接换成ACALL指令

如果使用ACALL指令,则可呼叫地址最小值为2000H,最大值为27FFH。即高5位地址保持00100不变,低11位地址可以从全0变为全1。地址范围为2K位元组。

2-11 试编写程式,查询在内部RAM的20H-50H单元中是否有0AAH这一资料。若有,则将51H单元置为01H;若未找到;则使51H单元置为0。

解:这个题可以有两种基本的解法。其一是先计算出资料块的长度,然后再作回圈和比较,程式如下:

CLR C

MOV R0,#20H ;R0中为资料块首地址

MOV A,#50H ;资料块末地址

SUBB A,R0

INC A

MOV R1,A ;R1存资料块长度

LOOP1:CJNE @R0,#0AAH,LOOP2

MOV 51H,#01H ;找到置(51H)=01H

SJMP LOOP3

LOOP2: ING R0

DJNZ R1,LOOP1

MOV 51H,#00H ;未找到,置(51H)=01H

LOOP3: SJMP $

第二种解法则直接用比较条件转移指令判断是否已经完成最后一次比较。这时MCS-51指令系统的特点之一。程式如下:

MOV R0,#20H ;R0存资料块首地址

LOOP1: CJNE @R0,#0AAH,LOOP2 ;比较

MOV 51H,#01H ;找到,置(51H)=01H

SJMP LOOP3

LOOP2: ING R0

DJNZ R0,#51H,LOOP1 ;未比较完则回圈

MOV 51H,#00H ;未找到,置(51H)=01H

LOOP3: SJMP $

2-12 试编写程式,查询在内部RAM的20H-50H单元中出现00H的次数,并将查询的结果存入51H单元。

解:此题的解法与上题相似,采用第二种解法,程式如下:

MOV R0,#1FH

MOV R1,#00H ;R1用作计数器

LOOP1: ING R0

CJNE @R0,#00H,LOOP2

INC R1 ;找到一个00H,计数器加1

LOOP2: CJNE @R0,#50H,LOOP1 ;未比较完则回圈

MOV 51H,R1 ;存比较结果

SJMP $

2-13 试编写程式,求20H单元和21H单元中两个补码数差的绝对值,即 。结果保留在A中。若计算结果出现溢位,则置22H单元为0FFH,否则,22H应为00H。

解:可直接用减法指令来完成减法,然后依据差的符号来求绝对值,若差为正数,则差就是所求绝对值。若差为负数,则求反加一之后就可得到绝对值。当然减法之后先要判断是否溢位。若溢位,则只需置溢位标记:使(22H)=0FFH即可。程式如下:

CLR C

MOV 22H,#0FFH

MOV A,20H

SUBB A,21H

JB OV,NEXT

JNB ACC.7,NEXT1 ;差为正则转移

CPL A ;差为负,求补为绝对值

ING A

NEXT1:MOV 22H.,#00H

NEXT: SJMP $

2-14 试编写程式,求20H,21H,22H单元的三个补码数差得绝对值,即 。结果保留在A中。若运算出现溢位,则置23H单元为0FFH;否则,置23H单元为00H。

解:此题的解法与上题相似。只是每次减法以后都要判断是否出现溢位,而不是做完两次减法以后才判断溢位。因为有可能第一次减法以后已经溢位,再作一次减法以后反倒没有溢位,而这时的结果实际上已经不正确了。例如,64-(-64)-(-1)=129。结果已经溢位,但分两步运算时,先由

64-(-64)=01000000-11000000=10000000

这时已经出现溢位,OV=1。若再作第二次减法,则结果为:

10000000-11111111=10000001

溢位标志反而被清零(因为负数减负数不可能溢位),但实际的结果并不正确。所以,需要每作完一次减法运算就检查溢位标志。程式如下:

CLR C

MOV 23H,#0FFH ;先置溢位标志

MOV A,20H

SUBB A,21H ;第一次相减

JB OV,NEXT ;溢位则结束

CLR C ;准备第二次相减

SUBB A,22H ;第二次相减

JB OV,NEXT ;溢位则结束

JNB ACC.7,NEXT1 ;差为正则转移

CPL A ;求反加一

ING A

NEXT1:MOV 23H.,#00H

NEXT: SJMP $

2-15 有一个16位二进位制数,高8位存于21H单元,低8位存于20H单元。试问:(1)执行以下程式段,完成什么逻辑功能?(2)能否用MOV指令替代其中的XCH指令而不改变程式的逻辑功能?写出相应的程式段。(3)这两个程式段的执行结果是否完全相同?差别在那里?

CLR C

XCH A,21H

RRC A

XCH A,21H

XCH A,20H

RRC A

XCH A,20H

解:(1)程式完成的逻辑功能是使21H和20H中的16位二进位制数右移一位,并使最高位为0,一般称为逻辑右移一位。

(2)可以用MOV指令,修改后程式段如下:

CLR C

MOV A,21H

RRC A

MOV 21H,A

MOV A,20H

RRC A

MOV 20H,A

(3)有所差别。虽然从16位右移功能来说两者的功能是相同的,但第一个程式段执行后,累加器A的内容仍维持原值,而第二个程式段执行后将改变A中的数值。

2-16 分析以下程式段的逻辑功能。若要用MOV指令代替其中的交换指令而不改变程式的逻辑功能,应如何进行修改?设20H中存放的是两个四位二进位制数。

MOV R1,#20H

XCHD A,@R1

ADD A,#01H

XCHD A,@R1

XCH A,@R1

ADD A,#01H

XCH A,@R1

解:程式的功能是将20H单元中的两个四位二进位制数分别加1,并且舍弃可能产生的进位。如(20H)=6AH,程式执行后位(20H)=7BH。又如(20H)=9FH,执行后(20H)=A0H。

不采用交换指令而要完成同样的功能,可以有多种修改方法。以下仅为一例:

MOV R1,#20H

XCHD A,@R1

ADD A,#01H 低4位加1

JB AC,NEXT 判断低四位有无进位

ADD A,#01H 高4位加1

NEXT: MOV @R1,A 送回20H单元

2-17 分析以下程式段的执行结果。若是将其中的DA A指令取消,则结果会有什么不同?

CLR C

MOV 20H,#99H

MOV A,20H

ADD A,#01H

DA A

MOV 20H,A

解:程式执行结果是A=00H,Cy=1,(20H)=00H。

取消DAA指令后,执行结果为A=9AH,Cy=0,(20H)=9AH。

2-18 以下的两个程式段中,R2内所存入的都是两位16进位制数。试问这两个程式段各进行多少次回圈?

MOV R2,#60H

LOOP:……

……

DJNZ R2,LOOP

SJMP $

MOV R2,#60H

LOOP:……

什么是计算机应用系统的安全性

就是计算机系统(软硬体)的安全性(防入侵,抗干扰,资料保护等)

请教计算机应用系统设计(嵌入式)方向

我是做嵌入式开发的,现在的嵌入式,绝大部分都是用linux平台开发,所以你首先要学好linux,给你推荐几本书吧,这几本是我初学的时候看的,很不错。

关于linux程式设计的书:《Linux程式设计(原书第2版)》,《[Linux英文原版图书系列].WILEY-Beginning_Linux_Programming_Third_Edition》,《LINUX程式设计白皮书》。

linux核心的:《自己动手写作业系统》,《Linux核心与程式设计》。

最新计算机人机互动应用系统有哪些?

谷歌好像有这方面的东西,可以去找找。

计算机传统三大应用领域是什么

计算机主要应用的领域包括以下六个方面:

一、资讯管理

资讯管理是以资料库管理系统为基础,辅助管理者提高决策水平,改善运营策略的计算机技术。资讯处理具体包括资料的采集、储存、加工、分类、排序、检索和释出等一系列工作。资讯处理已成为当代计算机的主要任务。是现代化管理的基础。据统计,80%以上的计算机主要应用于资讯管理,成为计算机应用的主导方向。资讯管理已广泛应用与办公自动化、企事业计算机辅助管理与决策、情报检索、图书馆里、电影电视动画设计、会计电算化等各行各业。

计算机的应用已渗透到社会的各个领域,正在日益改变着传统的工作、学习和生活的方式,推动着社会的科学计算

科学计算是计算机最早的应用领域,是指利用计算机来完成科学研究和工程技术中提出的数值计算问题。在现代科学技术工作中,科学计算的任务是大量的和复杂的。利用计算机的运算速度高、储存容量大和连续运算的能力,可以解决人工无法完成的各种科学计算问题。例如,工程设计、地震预测、气象预报、火箭发射等都需要由计算机承担庞大而复杂的计算量。

二、过程控制

过程控制是利用计算机实时采集资料、分析资料,按最优值迅速地对控制物件进行自动调节或自动控制。采用计算机进行过程控制,不仅可以大大提高控制的自动化水平,而且可以提高控制的时效性和准确性,从而改善劳动条件、提高产量及合格率。因此,计算机过程控制已在机械、冶金、石油、化工、电力等部门得到广泛的应用。

三、辅助技术

计算机辅助技术包括CAD、CAM和CAI。

1、计算机辅助设计(ComputerAidedDesign,简称CAD)

计算机辅助设计是利用计算机系统辅助设计人员进行工程或产品设计,以实现最佳设计效果的一种技术。CAD技术已应用于飞机设计、船舶设计、建筑设计、机械设计、大规模积体电路设计等。采用计算机辅助设计,可缩短设计时间,提高工作效率,节省人力、物力和财力,更重要的是提高了设计质量。

2、计算机辅助制造(ComputerAidedManufacturing,CAM)

计算机辅助制造是利用计算机系统进行产品的加工控制过程,输入的资讯是零件的工艺路线和工程内容,输出的资讯是刀具的运动轨迹。将CAD和CAM技术整合,可以实现设计产品生产的自动化,这种技术被成为计算机整合制造系统。有些国家已把CAD和计算机辅助制造(ComputerAidedManufacturing)、计算机辅助测试(ComputerAidedTest)及计算机辅助工程(ComputerAidedEngineering)组成一个整合系统,使设计、制造、测试和管理有机地组成为一体,形成高度的自动化系统,因此产生了自动化生产线和“无人工厂”。

3、计算机辅助教学(ComputerAidedInstruction,简称CAI)

计算机辅助教学是利用计算机系统进行课堂教学。教学课件可以用PowerPoint或Flash等制作。CAI不仅能减轻教师的负担,还能教学内容生动、形象逼真,能够动态演示实验原理或 *** 作过程激发学生的学习兴趣,提高教学质量,为培养现代化高质量人才提供了有效方法。

四、翻译

1947年,美国数学家、工程师沃伦·韦弗与英国物理学家、工程师安德鲁·布思提出了以计算机进行翻译(简称“机译”)的设想,机译从此步入历史舞台,并走过了一条曲折而漫长的发展道路。机译被列为21世纪世界十大科技难题。与此同时,机译技术也拥有巨大的应用需求。

机译消除了不同文字和语言间的隔阂,堪称高科技造福人类之举。但机译的译文质量长期以来一直是个问题,离理想目标仍相差甚远。中国数学家、语言学家周海中教授认为,在人类尚未明了大脑是如何进行语言的模糊识别和逻辑判断的情况下,机译要想达到“信、达、雅”的程度是不可能的。这一观点恐怕道出了制约译文质量的瓶颈所在。

五、多媒体应用

随着电子技术特别是通讯和计算机技术的发展,人们已经有能力把文字、音讯、视讯、动画、图形和影象等各种媒体综合起来,构成一种全新的概念—“多媒体”(Multimedia)。在医疗、教育、商业、银行、保险、行政管理、军事、工业、广播、交流和出版等领域中,多媒体的应用发展很快。

六、计算机网路

计算机网路是由一些独立的和具备资讯交换能力的计算机互联构成,以实现资源共享的系统。计算机在网路方面的应用使人类之间的交流跨越了时间和空间障碍。计算机网路已成为人类建立资讯社会的物质基础,它给我们的工作带来极大的方便和快捷,如在全国范围内的银行xyk的使用,火车和飞机票系统的使用等。可以在全球最大的网际网路络——Inter上进行浏览、检索资讯、收发电子邮件、阅读书报、玩网路游戏、选购商品、参与众多问题的讨论、实现远端医疗服务等。

交叉编译工具链作为嵌入式Linux开发的基础,直接影响到嵌入式开发的项目进度和完成质量。由于目前大多数开发人员使用Windows作为嵌入式开发的宿主机,在Windows中通过安装VMware等虚拟机软件来进行嵌入式Linux开发,这样对宿主机的性能要求极高。Cygwin直接作为Windows下的软件完全能满足嵌入式Linux的开发工作,对硬件的要求低及方便快捷的特点成为嵌入式开发的最佳选择。目前网络上Cygwin下直接可用的交叉编译器寥寥无几且版本都比较低,不能满足开源软件对编译器版本依赖性的要求(如低版本工具链编译U-Boot出现软浮点问题等)Crosstool等交叉工具链制作工具也是更新跟不上自由软件版本的进度同时系统介绍Cygwin下制作交叉编译器方面的资料很少。针对上述情况,基于最新版gcc等自由软件构建Cygwin下的交叉编译器显得尤为迫切和重要。构建前准备工作首先Cygwin下必须保证基本工具比如make}gcc等来构建bootstrap-gcc编译器,这可以在安装Cygwin时选择安装。参照gcc等安装说明文档来在Cygwin下查看是否已经安装,如输入gcc--v等。源码下载gcc-4.5.0的编译需mpc的支持,而mpc又依赖gmp和mpfr库。从各个项目官方网站上下载的最新的源码:binutils-2.20.l.tar.bz2gmp-S.O.l.tar.bz2mpc-0.8.2.tar.gzmpfr-3.O.O.tar.bz2gcc-4.S.O.tar.bz2linux-2.6.34.tar.bz2glibc-2.11.2.tar.bz2glibc-ports-2.ll.tar.bz2gdb-7.l.tar.bz2设置环境变量HOST:工具链要运行的目标机器BUILD:用来建立工具链的机器TARGET工具链编译产生的二进制代码可以运行的机器。BUILD=i686-pc-cygwinHOST=i686-pc-cygwinTARGET=arm-linuxSYSROOT指定根目录,$PREFIX指定安装目录。目标系统的头文件、库文件、运行时对象都将被限定在其中,这在交叉编译中有时很重要,可以防止使用宿主机的头文件和库文件。本文首选$SYSROOT为安装目录,$PREFIX主要作为glibc库安装目录。SYSROOT=/cross-rootPREFIX=/cross-root/arm-linux由于GCC-4.5.0需要mpfr,gmp,mpc的支持,而这三个库又不需要交叉编译,仅仅是在编译交叉编译链时使用,所以放在一个临时的目录。TEMP_PREFIX=/build-temp控制某些程序的本地化的环境变量:LCALL=POSIX设置环境变量:PATH=$SYSROOT/bin:儿in:/usr/bin设置编译时的线程数f31减少编译时间:PROCS=2定义各个软件版本:BINUTILSV=2.20.1GCCV=4.5.0GMPV=5.0.1MPFRV=3.0.0MPCV二0.8.2LINUXV二2.6.34GLIBCV=2.11.2GLIBC-PORTSV=2.11GDBV=7.1构建过程详解鉴于手工编译费时费力,统一把构建过程写到Makefile脚本文件中,把其同源码包放在同一目录下,执行make或顺次执行每个命令即可进行无人值守的编译安装交叉工具链。以下主要以Makefile执行过程为主线进行讲解。执行“make”命令实现全速运行可在Cygwin的Shell环境下执行“make>make.log2>&1”命令把编译过程及出现的错误都输出到make.log中,便于查找:all:prerequestinstall-depsinstall-cross-stage-oneinstall-cross-stage-two预处理 *** 作"makeprerequest',命令实现单步执行的第一步,实现输出变量、建立目录及解压源码包等 *** 作。0'set十h”关闭bash的Hash功能,使要运行程序的时候,shell将总是搜索PATH里的目录[4]。这样新工具一旦编译好,shell就可以在$(SYSROOT)/bin目录里找到:prerequest:set+h&&mkdir-p$(SYSROOT)/bin&&mkdir-p$(PREFIX)/include&&mkdir-p$(TEMP一REFIX)&&exportPATHLCesALL&&tar-xvfgmp-$(GMP_V).tar.bz2&&tar-xvfmpfr-$(MPFR_V).tar.bz2&&tar-xvfmpc-$(MPC_V).tar.gz&&tar-xvfbinutils-$(BINUTILS_V).tar.bz2&&tar-xvfgcc-$(GCC_V).tar.bz2&&tar-xvflinux-$(LINUX_V).tar.bz2&&tar-xvfglibc-$(GLIBC_V).tar.bz2&&tar-xvfglibc-ports-$(GLIBC-PORTS_V).tar.bz2&&myglibc-ports-$(GLIBC-PORTS_V)glibc-$(GLIBC_V)/ports&&tar-xvfgdb-$(GDBV).tar.bz2非交叉编译安装gcc支持包mpc00makeinstall-deps”命令实现单步执行的第二步,实现mpc本地编译,mpc依赖于gmp和mpfrinstall-deps:gmpmpfrmpcgmp:gmp-$(GMP_V)mkdir-pbuild/gmp&&cdbuild/gmp&&../../gmp-*/configure--disable-shared--prefix=$(TEMP_PREFIX)&&$(MAKE)一$(PROCS)&&$(MAKE)installmpfr:mpfr-$(MPFR_V)mkdir-pb-uild/mpfr&&cdbuild/mpfr&&../..//mpfr-*/configureLDF'LAGS="-Wl,-search_paths_first”--disable-shared--with-gmp=$(TEMP_PREFIX)--prefix=$(TEMP_PREFIX)&&$(MAKE)一$(PROCS)all&&$(MAKE)installmpc:mpc-$(MPC_V)gmpmpfrmkdir-pbuild/mpc&&cdbuild/mpc&&../../mpc-*/configure--with-mpfr=$(TEMPPREFIX)--with-gmp=$(TEMP_PREFIX)--prefix=$(TEMP_PREFIX)&&$(MAKE)一$(PROCS)&&$(MAKE)install交叉编译第一阶段"makeinstall-cross-stage-one',命令实现单步执行的第三步,编译安装binutils,bootstrap-gcc和获取Linux内核头文件:install-cross-stage-one:cross-binutilscross-gccget-kernel-headers编译安装binutilscross-binutils:binutils-$(BINUTILS_V)mkdir-pbuild/binutils&&cdbuild/binutils&&../..//binutils-*/configure--prefix=$(SYSROOT)--target=$(TARGET)--disable-nls&&$(MAKE)j$(PROCS)&&$(MAKE)install编译安装bootstrap-gcc。使用一disable-shared参数的意思是不编译和安装libgcc_eh.a文件。glibc软件包依赖这个库,因为它使用其内部的一lgcc_eh来创建系统[6]。这种依赖性,可通过建立一个指向libgcc.a符号链接得到满足,因为该文件最终将含有通常在libgcc-eh.a中的对象(也可通过补丁文件实现)。cross-gcc:gcc-$(GCC_V)mkdir-pbuild/gcc&&cdbuild/gcc&&二//gcc-*/configure--target=$(TARGET)--prefix=$(SYSROOT)--disable-nls--disable-shared--disable-multilib--disable-decimal-float--disable-threads--disable-libmudflap--disable-libssp--disable-libgomp--enable-languages=c--with-gmp=$(TEMP_PREFIX)--with-mpfr=$(TEMP_PREFIX)--with-mpc=$(TEMP_PREFIX)&&$(MAKE)-j$(PROCS)&&$(MAICE)install&&In-vslibgcc.a'arm-linux-gcc-print-libgcc-file-nameIsed's/libgcc/&eh/'}获取Linux内核头文件:get-kernel-headersainux-$(LINUX_V)cdlinux-$(LINUX_V)&&$(MAICE)mrproper&&$(MAKE)headerscheck&&$(MAKE)ARCH=arm&&INSTALLesHDR_PATH=destheaders_install&&finddest/include(-name.install一。-name..installNaNd)-delete&&cp-rvdesdinclude/*$(PREFIX)/include交叉编译第二阶段编译安装glibc、重新编译安装binutils、完整编译安装gcc和编译安装gdbo"makeinstall-cross-stage-two',命令实现单步执行的第四步:install-cross-stage-two:cross-glibccross-rebinutilscross-g++cross-gdb编译安装glibcaglib。的安装路径特意选为$(PREFIX),与gcc更好找到动态链接库也有关系,选在$(SYSROOT)提示找不到crti.oglibc已经不再支持i386glibc对ARM等的处理器的支持主要通过glibc-ports包来实现正确认识大小写敏感(CaseSensitive)和大小写不敏感(CaseInsensitive)系统,大小写敏感问题主要影响到glibc,是交叉编译glibc成功的关键:Cygwin帮助手册中可知Cygwin是默认大小写不敏感的n},但是UNIX系统是大小写敏感的,这也是Cygwin和UNIX类系统的一个区别。通过作者自行参考制作的glibc-2.11.2-cygwin.patch补T使glibc变为Case-Insensitive,此补丁主要是对大小写敏感问题改名来实现。交叉编译过程中安装的链接器,在安装完Glibc以前都无法使用。也就是说这个配置的forcedunwind支持测试会失败,因为它依赖运行中的链接器。设置libc_cvforcedunwind=yes这个选项是为了通知configure支持force-unwind,而不需要进行测试。libccv_c_cleanup=yes类似的,在configure脚本中使用libc_cv_ccleanup=yes,以便配置成跳过测试而支持C语言清理处理。cross-glibc:glibc-$(GLIBC_V)cdglibc-$(GLIBC_V)&&patch-Np1–i//glibc-2.11.2-cygwin.patch&&cd..&&mkdir-pbuild/glibc&&cdbuild/glibc&&echo"libccv_forcedesunwind=yes">config.cache&&echo"libccv_c_cleanup=yes">>config.cache&&echo"libccv_arm_tls=yes">>config.cache&&../../glibc-*/configure--host=$(TARGET)--build=$(../OneScheme/glibc-2.11.2/scripts/config.guess)--prefix=$(PREFIX)--disable-profile--enable-add-ons--enable-kernel=2.6.22.5--with-headers=$(PREFIX)/include--cache-file=config.cache&&$(MAKE)&&$(MAKE)install重新编译安装binutils。编译之前要调整工具链,使其指向新生成的动态连接器。调整工具链:SPECS='dirname$(arm-linux-gcc-print-libgcc-file-name)'/specsarm-linux-gcc-dumpspecssed-e's@/lib(64)\?/ld@$(PREFTX)&@g'-e,}/}}*cPP}$/{ns,$,-isystem$(PREFIX)/include,}">$SPECSecho"Newspecsfileis:$SPECS"unsetSPECS测试调整后工具链:echo'main(川’>dummy.carm-linux-gcc-B/cross-root/arm-linux/libdummy.creadelf-1a.outIgrep’:/cross-roobarm-linux'调整正确的输出结果:[Requestingprograminterpreter:/tools/lib/ld-linux.so.2j一切正确后删除测试程序:rm-vdummy.ca.out重新编译binutils。指定--host,--build及--target,否则配置不成功,其config.guess识别能力不如gcc做的好。cross-rebinutils:binutils-$(BINUTILS_V)mkdir-pbuild/rebinutils&&cdbuild/rebinutils&&CC="$(TARGET)-gcc-B/cross-roodarm-linux/lib/"&&AR=$(TARGET)-ar&&RANLIB=$(TARGET)-ranlib&&../..//binutils-*/configure--host=$(HOST)--build=$(BUILD)--target=$(TARGET)--prefix=$(SYSROOT)--disable-nls--with-lib-path=$(PREFIX)/lib&&$(MAKE)--$(PROCS)&&$(MAKE)install高于4.3版的gcc把这个编译当作一个重置的编译器,并且禁止在被一prefix指定的位置搜索startfiles。因为这次不是重置的编译器,并且$(SYSROOT)目录中的startfiles对于创建一个链接到$$(SYSROOT)目录库的工作编译器很重要,所以我们使用下面的补丁,它可以部分还原gcc的老功能tai.patch-Npl–i../gcc-4.5.0-startfiles_fix-l.patch在正常条件下,运行gcc的fixincludes脚本,是为了修复可能损坏的头文件。它会把宿主系统中已修复的头文件安装到gcc专属头文件目录里,通过执行下面的命令,可以抑制fixincludes脚本的运行[9](此时目录为/gcc-4.5.0)。cp-vgcc/Makefile.in{,.orig}sed's@\./fixinc\.sh@-ctrue@'gcc/Makefile.in.orig>gcc/Makefile.in下面更改gcc的默认动态链接器的位置,使用已安装在/cross-root/ann-linux目录下的链接器,这样确保在gcc真实的编译过程中使用新的动态链接器。即在编译过程中创建的所有二进制文件,都会链接到新的glibc文件forfilein$(findgcc/config-namelinux64.h-o-namelinux.h–o-namesysv4.h)docp-uv$file{,.orig}sed-a's@/lib(64)?(32)?/Id@/cross-root/arm-linux&@g’-e's@/usr@/cross-rootlarm-linux@g'$file.orig>$fileecho‘#undefSTANDARDINCLUDEDIR#defineSTANDARD_INCLUDEDIR"/cross-root/arm-linux/include"#defineSTANDARDSTARTFILEPREFIX1"/cross-root/arm-linux/lib"#defineSTANDARD_STARTFILE_PREFIX_2””’>>$filetouch$file.origdone完整编译安装gcc。最好通过指定--libexecdir更改libexecdir到atm-linux目录下。--with-local-prefix选项指定gcc本地包含文件的安装路径此处设为$$(PREFIX),安装后就会在内核头文件的路径下。路径前指定$(Pwd)则以当前路径为基点,不指定则默认以/home路径为基点,这点要注意。cross-g++:gcc-$(GCC-)mkdir-pbuild/g十+&&cdbuild/g++&&CC="$(TARGET)-gccAR=$(TARGET)-ar&&-B/cross-roodarm-linux/lib/"&&RANLIB=$(TARGET)-ranlib&&..//gcc-*/configure--host=$(HOST)--build=$(BUILD)--target=$(TARGET)--prefix=$(SYSROOT)--with-local-prefix=$(PREFIX)--enable-clocale=gnu--enable-shared--enable-threads=posix--enable-cxa_atexit--enable-languages=c,c++--enable-c99--enable-long-long--disable-libstdcxx-pch--disable-libunwind-exceptions--with-gmp=$(TEMP_PREFIX)--with-mpfr=$(TEMP_PREFIX)--with-mpc=$(TEMP_PREFIX)&&$(MAKE)LD_IBRARY_ATH=$(pwd)/$(../../gcc-4.5.0/config.guess)/libgcc&&$(MAKE)install编译安装gdb,至此完成整个工具链的制作。cross-gdb:gdb-$(GDBV)mkdir-pbuild/gdb&&cdbuild/gdb&&../../gdb-*/configure--prefix=$(SYSROOT)--target=$(TARGET)--disable-werror&&$(MAKE)-j$(PROCS)&&$(MAKE)install“makeclean”命令清除编译生成的文件和创建解压的文件夹.PHONY:cleandean:rm-fr$(TEMP_PREFIX)buildbinutils-$(BINUTIL,S_V)gcc-$(GCC_V)glibc-$(NEWL.IB_V)gdb-$(GDB_V)gmp-$(GMP_V)mpc-$(MPC_V)mpfr-$(MPFR_V)工具链测试命令行中输入以下内容:echo'main(){}’>dummy.carm-linux-gcc-odummy.exedummy.cfiledummy.exe运行正常的结果:dummy.exe:ELF32-bitLSBexecutable,ARM,version1,forGNU/Linux2.6.22,dynamicallylinked(usessharedlibs),notstripped.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7104506.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-01
下一篇2023-04-01

发表评论

登录后才能评论

评论列表(0条)

    保存