把汇编源程序变成代码程序的过程是编译。
编译语言不像直译语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。
扩展资料:
编译技术的发展
在早期冯诺依曼计算机时期 (20世纪40年代) 程序都是以机器语言编写,机器语言就是实际存储的01代码,编写程序是十分枯燥乏味的。
后来汇编语言代替机器语言一符号形式该处 *** 作指令和地址编码。但汇编语言仍有许多缺点, 阅读理解起来很难,而且必须依赖于特定的机器,如果想使编写好的程序在另一台计算机上运行必须重写。
在20世纪50年代IBM的John Backus带领一个研究小组对FORTRAN高级语言及其编译器进行开发。编译程序的自动生成工具初现端倪,现在很多自动生成工具已经广泛使用例如语法分析工具LEX,语言分析程序YACC等。
在20世纪60年代人们不断的用自编译技术构造编译程序,即用被编译的语言本身来实现该语言的编译程序,但其基本原理和结构大体相同。
ORG 00H
你参考一下这个吧,兄弟没有原理图这个程序没办法给你解释清楚的,还有不加C程序能运行
START:MOV A,#00H ;清除屏幕
MOV P0,A
MOV P2,A
CALL DIS ;调用显示子程序
CALL DELAY ;调用延时子程序
CALL MOVE ;调用左移子程序
JMP START
DIS: MOV R2,#04H ;每个画面2个字,8个字分4次显示
MOV 20H,#00 ;取码指针暂存地址20H初值为00
D4: MOV R4,#00H ;74LS154扫描指针初值
MOV R1,#0FFH ;每幕停留的时间
D5: MOV R6,#32 ;每幕两个字,32个数据码
MOV R0,20H ;取码指针存入R0
D2: CALL READ1 ;调用取码子程序
INC R4 ;扫描下一列
DJNZ R6,D2 ;显示1幕?
MOV R4,#00 ;清除74LS154扫描指针为00
DJNZ R1,D5 ;每幕停留时间到了?
MOV 20H,R0 ;保留取码指针存入20H地址
DJNZ R2,D4 ;2幕显示完毕了?
RET
MOVE:
MOV 20H,#00 ;取码指针暂存地址20H初值为00
MOV R4,#00H ;74LS154扫描指针初值
M1: MOV R1,#0FFH ;每幕停留时间
M2: MOV R6,#32 ;每幕两个字,32个数据码
MOV R0,20H ;取码指针存入R0
M3: CALL READ1 ;调用取码子程序
INC R4 ;扫描下一列
DJNZ R6,M3 ;显示1幕
MOV R4,#00 ;清除74LS154扫描指针为00
DJNZ R1,M2 ;每幕停留时间到了
MOV A,20H ;取码指针载入A
ADD A,#08H ;加8
MOV 20H,A ;再存入20H地址取码指针
XRL A,#128 ;8个字是否都左移完毕了
JNZ M1
RET
READ1:MOV A,R4 ;扫描指针载入A
MOV P1,A ;输出至P1扫描列
MOV A,R0 ;取码指针载入A
MOV DPTR,#TABLE ;数据指针指到TABLE
MOVC A,@A+DPTR ;到TABLE取上半部的数据码
MOV P0,A ;输出至P0显示
INC R0 ;取下一个码
MOV A,R0 ;取码指针载入A
MOV DPTR,#TABLE ;数据指针指到TABLE
MOVC A,@A+DPTR ;到TABLE 取下半部的数据码
MOV P2,A ;输出至p2显示
INC R0 ;取码值加1
MOV R3,#25 ;延时
DJNZ R3,$
MOV A,#00H ;清除屏幕
MOV P0,A
MOV P2,A
RET
DELAY:
MOV R3,#200
D7: MOV R5,#248
DJNZ R5,$
DJNZ R3,D7
RET
;1 "振"
TABLE:DB 08H,40H,08H,42H
DB 08H,81H,0FFH,0FEH
DB 09H,02H,0AH,0CH
DB 7FH,0F0H,49H,00H
DB 49H,0FFH,49H,02H
DB 49H,0E0H,49H,18H
DB 59H,14H,0CBH,26H
DB 41H,44H,00H,00H
;2 "兴"
DB 00H,80H,00H,81H
DB 20H,82H,18H,84H
DB 0CH,88H,00H,98H
DB 0C0H,80H,3CH,80H
DB 00H,80H,01H,90H
DB 06H,88H,18H,84H
DB 60H,86H,01H,83H
DB 00H,80H,00H,00H
;3 "中"
DB 00H,00H,1FH,0C0H
DB 10H,80H,10H,80H
DB 10H,80H,10H,80H
DB 10H,80H,0FFH,0FFH
DB 10H,80H,10H,80H
DB 10H,80H,10H,80H
DB 10H,80H,3FH,0C0H
DB 10H,00H,00H,00H
;4 "华"
DB 00H,20H,02H,20H
DB 04H,20H,08H,20H
DB 3FH,0A0H,0C0H,20H
DB 02H,20H,04H,0FFH
DB 08H,20H,0FFH,20H
DB 10H,0A0H,20H,0A0H
DB 60H,0A0H,03H,0A0H
DB 00H,20H,00H,00H
;5 "电"
DB 00H,00H,1FH,0E0H
DB 12H,40H,12H,40H
DB 12H,40H,12H,40H
DB 0FFH,0FCH,12H,42H
DB 12H,42H,12H,42H
DB 12H,42H,3FH,0E2H
DB 10H,02H,00H,0EH
DB 00H,00H,00H,00H
;6 "子"
DB 01H,00H,01H,00H
DB 41H,00H,41H,00H
DB 41H,00H,41H,02H
DB 41H,01H,47H,0FEH
DB 45H,00H,49H,00H
DB 51H,00H,61H,00H
DB 01H,00H,03H,00H
DB 01H,00H,00H,00H
;7 "事"
DB 20H,20H,20H,20H
DB 2EH,0A8H,2AH,0A8H
DB 2AH,0A8H,2AH,0AAH
DB 2AH,0A9H,0FFH,0FEH
DB 2AH,0A8H,2AH,0A8H
DB 2AH,0A8H,2AH,0A8H
DB 2EH,0FCH,60H,20H
DB 20H,20H,00H,00H
;8 "业"
DB 00H,02H,08H,02H
DB 06H,02H,01H,0E2H
DB 00H,02H,0FFH,0FEH
DB 00H,02H,00H,02H
DB 00H,02H,0FFH,0FEH
DB 00H,22H,00H,0C2H
DB 03H,02H,0CH,06H
DB 00H,02H,00H,00H
END
#include <stdioh>
#include <mathh>
double f(double x)
{
double y;
y=pow(x,2)-3x+2;
return (y);
}
main()
{
double a,b,yl,yr,ym,xl,xr,xm;
printf("请输入a值:");
scanf("%lf",&a);
printf("\n请输入b值:");
scanf("%lf",&b);
yl=f(a);
yr=f(b);
printf("\nyl=%f\n",yl);
printf("\nyr=%f\n",yr);
while(ylyr>0)
{
printf("所求根不在[%f,%f]区间内\n",a,b);
printf("请重新输入a值:");
scanf("%f",&a);
printf("\n请重新输入b值:");
scanf("%f",&b);
yl=f(a);
yr=f(b);
}
xr=a;
xl=b;
while(fabs(xr-xl)>0000001)
{
xm=(xl+xr)/2;
ym=f(xm);
yl=f(xl);
yr=f(xr);
if(ylym<0&&yrym>0)
xr=xm;
else
xl=xm;
}
printf("\n所求根为x=%f\n",xm);
return 0;
}
以上就是关于把汇编源程序变成代码程序的过程是()全部的内容,包括:把汇编源程序变成代码程序的过程是()、跪求程序高手帮忙解读下程序。是一个LED点阵显示的汇编源代码。、求解c++汇编程序中 解线性方程组的 源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)