当前位置:首页 » 编程语言 » c汇编语言结构
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c汇编语言结构

发布时间: 2022-01-29 13:53:41

① 在单片机汇编语言中c是什么意思

C为进借位标志位,就是CY
意思是两数相加(ADDC指令)有进位就置C为1,两数减(SUBB指令)有借位就置C为1,
上面两种请况C的置1是系统自动的。
另外还可以自己对C进行操作 指令如下:
MOV C, bit 将bit位地址中的值送PSW中的进位标志位CY
MOV bit, C 将PSW中的进位标志位CY的值送bit位地址中
CLR C 将进位标志位CY清0
SETB C 将进位标志位CY置1
ANL C, bit 将Cy和bit位地址中的值进行与操作后,结果送Cy
ANL C, /bit bit位地址中的值取反后再与Cy进行与操作,结构送Cy
ORL C, bit 将Cy和bit位地址中的值进行或操作后,结果送Cy
ORL C, /bit bit位地址中的值取反后再与Cy进行或操作,结构送Cy
CPL C 将Cy取反
还可以根据C的状态分别执行转移指令,如下
JC rel If(C=1)转移到rel处执行指令
JNC rel If(C=0)转移到rel处执行指令。

c语言汇编语言

两个不同的概念,C语言属于高级语言,里面的INC和LIB文件夹里面有很多API的封装,你可以很方便的调用不同的库函数。
汇编是底层的语言,是最接近机器语言的一种语言。执行效率非常高,所形成的文件大小很小。如果你够犀利,可以用汇编语言去调用C的函数库。
你可以下载masm32的编译器看看,里面的INC和LIB文件夹的内容和C都是一样的
不同的是,汇编只是将C语言里面的INC和LIB里面的内容用汇编语言翻译了一遍而已。

③ 汇编语言程序的基本结构并加以详细的解释

HELLO,WORLD进阶汇编程序系列

Editor:admin Time:2004-3-21 12:49 Read:9785 Score:8 Print
Writer:LLUCT
Excerpt:80x86汇编小站

Preface:
感谢网友lluct为本站提供原创......适合初学者学习哦

Content:
TITLE ***HELLO,WORLD进阶程序之选择分支 BY LLUCT***

DATA SEGMENT ;定义数据段
MSG1 DB '***WELCOME TO MY PROGRAM BY LLUCT***','$'
;定义输出的第一个字符串信息,字符串必须用DB定义,$为结束标志
MSG2 DB '1:BASIC MESSAGE 2:ADVANCED MESSAGE','$'
;定义输出的字符串信息:选择菜单
MSG3 DB 'PLEASE CHOOSE:','$'
;定义输出的字符串信息:选择前缀
MSG4 DB 'HELLO,WORLD!^-^','$'
;定义输出的字符串信息:分支1的信息
MSG5 DB 'THIS IS MY FIRST ASM_86 PROGRAM! @^-^@','$'
;定义输出的字符串信息:分支2的信息
ERRMSG DB 'CHOOSE ERROR! -_-b','$'
;定义输出的字符串信息:选择错误信息
DATA ENDS ;数据段结尾

CODE SEGMENT ;定义代码段
ASSUME CS:CODE ;规定CS的内容
ASSUME DS:DATA ;规定DS的内容

START: MOV AX,DATA ;程序从START开始
MOV DS,AX ;DS置初值,DATA的段地址

CALL ENTER ;调用显示回车换行子程序
LEA DX,MSG1 ;输出第一个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序
CALL ENTER ;调用显示回车换行子程序
CALL ENTER ;这个...同上啊^-^

LEA DX,MSG2 ;输出第二个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序

AGAIN: CALL ENTER ;定义AGAIN标号.用于选择错误循环

LEA DX,MSG3 ;输出第三个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序

MOV AH,01H ;调用1号功能:从键盘输入一个字符并回显
INT 21H ;完成输入回显
CMP AL,'1' ;输入的字符和1相比较
JE BASICP ;如果相等,转移到BASICP标号(JE=Jump if Equal)
CMP AL,'2' ;输入的字符和2相比较 ||
JE ADVANP ;如果相等,转移到ADVANP标号(JE=如果相等就转移)
JMP ERROR ;否则就无条件转移到ERROR标号

EXIT: MOV AH,4CH ;4C号功能调用:终止当前程序并返回调用程序
INT 21H ;返回DOS

BASICP: CALL ENTER ;什么,还要解释啊.晕-_-!!!
LEA DX,MSG4 ;输出第三个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序
CALL ENTER ;..........
JMP EXIT ;无条件转移到EXIT标号

ADVANP: CALL ENTER ;55555555
LEA DX,MSG5 ;解释了四次,应该懂了吧
CALL DISPCHS ;调用显示字符串子程序
CALL ENTER ;再问就死给你看
JMP EXIT ;无条件转移到EXIT标号

ERROR: CALL ENTER
LEA DX,ERRMSG ;输出选择错误信息
CALL DISPCHS ;调用显示字符串子程序
MOV DL,07H ;输出ASCII码的报警(响铃)控制符BEL(07H)
CALL DISPCH ;调用显示单个字符子程序
CALL ENTER
JMP AGAIN

DISPCH PROC NEAR
;显示单个字符子程序,NEAR说明子程序和主程序在同一个代码段中(现无主程序调用)
MOV AH,02H ;2号功能调用:显示器输出字符
INT 21H ;完成输出显示
RET ;返回
DISPCH ENDP ;子程序结尾

ENTER PROC NEAR ;显示回车换行子程序
MOV DL,0DH ;输出ASCII码的回车控制符CR(0DH)
CALL DISPCH ;调用显示单个字符子程序
MOV DL,0AH ;输出ASCII码的换行控制符LF(0AH)
CALL DISPCH ;调用显示单个字符子程序
RET ;返回
ENTER ENDP ;子程序结尾

DISPCHS PROC NEAR
;显示字符串子程序,NEAR说明子程序和主程序在同一个代码段中(现无主程序调用)
MOV AH,09H ;9号功能调用:显示字符串
INT 21H ;完成输出显示
RET
DISPCHS ENDP

CODE ENDS ;代码段结尾
END START ;结束汇编

;把以上代码复制到记事本等文本程序中,并保存.(如helloch.asm)
;编译:masm helloch.asm
;连接:link helloch.obj
;执行:helloch.exe

======================================================

title ***hello,world进阶之字符串输入输出 by lluct***

data segment ;定义数据段
input db 100 p(?)
;定义输入的字符串,字符串必须用db定义,长度为100个字节
msg1 db 'Hello,','$'
;定义输出的前缀字符串信息,字符串必须用db定义,$为结束标志(24h)
msg2 db ',Welcome to here!','$'
;定义输出的后缀字符串信息
headmsg db 'PLEASE INPUT YOUR NAME:','$'
;开始显示的字符串信息
data ends ;数据段结尾

code segment ;定义代码段
assume cs:code ;规定cs的内容
assume ds:data ;规定ds的内容

start: mov ax,data ;程序从start开始
mov ds,ax ;ds置初值,data的段地址
mov si,0 ;变址寄存器置初值0

call enter ;调用显示回车换行子程序
lea dx,headmsg ;输出开始显示的字符串的偏移地址
call dispchs ;调用显示字符串子程序
repeat: mov ah,01h
;定义repeat标号,用于循环输入单个字符.调用1号功能:从键盘输入一个字符并回显
int 21h ;完成输入回显
cmp al,0dh ;输入的字符和CR(回车)比较
je exit ;如果等于回车就转移到exit
mov input[si],al ;把al的值传送到input的si地址中(好像是这样吧)
inc si ;si加1
jmp repeat ;无条件转移到repeat

exit: call enter
mov input[si],24h ;给输入完成的字符串加上结束标志($)
call enter
lea dx,msg1 ;输出前缀字符串的偏移地址
call dispchs ;调用显示字符串子程序
lea dx,input ;输出刚才输入的字符串
call dispchs
lea dx,msg2
call dispchs
call enter

mov ah,4ch ;4c号功能调用:终止当前程序并返回调用程序
int 21h ;返回dos

enter proc near ;显示回车换行子程序
mov dl,0dh ;输出ascii码的回车控制符cr(0dh)
call dispch
mov dl,0ah ;输出ascii码的换行控制符lf(0ah)
call dispch
ret ;返回
enter endp ;子程序结束

dispch proc near
mov ah,02h ;2号功能调用:显示器输出字符
int 21h ;完成输出显示
ret ;返回
dispch endp

dispchs proc near
mov ah,09h ;9号功能调用:显示字符串
int 21h ;完成输出显示
ret ;返回
dispchs endp

code ends ;代码段结尾
end start ;结束汇编

;把以上代码复制到记事本等文本程序中,并保存.(如heinout.c)
;编译:masm heinout.asm
;连接:link heinout.obj
;执行:heinout.exe

④ 汇编语言和C语言有什么区别

1:
汇编语言是面向具体CPU及其硬件结构的语言
C语言可以做到硬件无关性
2:
汇编语言效率较高
C语言效率相对较低
3:
汇编语言是非结构语言,可读性较弱
C语言是结构语言,可读性较强
4:
汇编语言基本没有可移植性
C言可移植性很强
5:
汇编语言没有函数库,所有代码需要自己组织
C语言有丰富的函数库可供调用。

⑤ C语言与汇编语言

楼上都不懂。
C相对汇编来说的优势主要在移植性上和开发效率上。程序执行效率不如汇编。所以如果不关注程序执行效率的话,推荐用C.当然,现在绝大部分的处理器都有C编译器。
但是为什么8086上采用汇编语言呢?
最主要的的原因是,8086有足够多的通用寄存器。
为什么有足够多的通用寄存器就不需要用C了呢?
原因在于,你就不需要层层压栈来控制参数的保存和传递,而这在C里都是编译器为你自动分配的。在C里,对你而言只要知道你定义的变量名就可以,而不需要知道编译器是如何分配内存单元或者寄存器来存储你的变量。当你拥有了足够多的通用寄存器,用汇编做小程序不是更简单?

⑥ C语言和汇编语言的关系

程序员编写的C语言代码,首先要经过C语言编译器,生成汇编代码,这个过程称为编译阶断,当C语言编译器生成汇编代码后,再调用汇编器来将汇编代码编译成汇编指令。

这是一种站在巨人肩人的作法,最早的C++编程语言也是这样的实现方法,只不过那时候叫Cfront程序,Cfront程序的作用是将C++代码转换成C语言代码,类似于一个文本处理器,然后再调用C语言编译器,将C源码编译成汇编代码,然后再调用汇编器将汇编代码编译成机器码。

这个过程,在Windows平台上不容易操作,但是在Linux平台上很容易看到。以gcc这款c语言编译器为例,它实际上是四个小程序。
cp: c语言预处理程序,有它负责进行预处理操作。
cc: C语言编译器,它负责将C源码编译成汇编代码。
as: 汇编器,它负责将汇编代码编译成机器码,一般使用gcc test.c这样的命令编译C语言时,会生成一个a.out的程序,它实际上指的就是as ouput,即汇编器输出文件。
link: 链接器,它负责将汇编器输入的机器码和库打包成一个操作系统可以运行的可执行文件,在Linux上的可执行文件格式是ELF格式,这个格式的实现是有链接器来完成的。

⑦ C语言和汇编语言的区别是什么

区别如下:

(1)两者编译组成不同。汇编语言是将由0、1组成的机器语言用具有简单语义的英文代码表示,而C语言不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等。

(2)两者被计算机识别的路径不同。汇编语言通常用于对硬件的直接操控。而且C语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。

(3)两者用处不同。汇编语言通常用在程序中最核心的、控制硬件的代码,一方面是安全,另一方面提高运行速度。而C语言通常用在计算机外用功能上。

(4)两者学习难易程度不同。汇编语言所需要的编绘知识很多很复杂,经常被开发者使用。而C语言是一门很简单方便的语言,编程者也就不需要有太多的专业知识。

计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。计算机语言从低级到高级可以分为:

(1)机器语言,即由0、1组成的机器硬件可以识别的语言;

(2)低级语言,即汇编语言

(3)中级语言,如C语言

(4)高级语言,如C++,JAVA,C#等。

(7)c汇编语言结构扩展阅读:

如今通用的编程语言有两种形式:汇编语言和高级语言。

汇编语言和机器语言实质是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,容易识别和记忆。源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

高级语言是绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

高级语言主要是相对于低级语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如流行的vb、vc、foxpro、delphi等,这些语言的语法、命令格式都各不相同。

高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:解释类和编译类。

⑧ 汇编语言和c语言各自优缺点

C语言编属于高级语言,具有可移植性,能够结构化编程。使用标准C语言的程序,几乎都可以不作改变移植到不同的微机平台上,对于嵌入式等的微控制芯片,属于标准C语言的部分也很少需要修改,而且程序很容易读懂。
C语言编写程序结构清晰,移植性好,容易维护和修改。

汇编语言针对不同的操作系统平台,不同的微控制器,指令都是完全不同的,即使指令相似,也不具有可移植性。但是汇编语言是针对专门的控制器的,所以运行速度可以精确到一个指令周期。汇编语言的程序读懂需要借助微控制器的指令手册以及各个寄存器的说明,所以很难读懂。
汇编语言编写代码实时性强,能够直接控制硬件的工作状态,但是不具有可移植性,维护和修改困难。

⑨ c语言和汇编语言的区别

C语言是需要经过机器语言解释和翻译才能被硬件执行的高级语言。
汇编是一种直接对于硬件操作的语言,属于低级语言,面向硬件。
另外:两种语言的语法也是完全不同的。你可以在网上找一些例子看看就知道区别了。

⑩ 一条C语言由若干汇编语言组成。这句话对吗

不对,C语言里面除了_asm那类命令,没有一句是汇编语句。

正确的说法是,一条C语言会被编译器编译成若干句汇编语言,以便转换为可执行代码。