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

c语言用不用段寄存器

发布时间: 2022-05-10 08:47:44

c语言转汇编问题

当然可以
不过c语言生成的程序,局部变量段地址在ss里面,全局变量段地址在ds里面。
读写数据需要确定数据的段地址和偏移地址。

对于段地址。 若int a=500是局部变量,那么写入的时候需要保存段寄存器里面的值是ss。是全部变量则保证段寄存器里面的值是ds。
对于偏移地址,c语言可以用&a这样的方式获得。

全局变量的写法大致是如下代码
mov bx, &a
mov wrod ptr ds:[bx], 500

❷ C语言程序设计实验中汇编程序使用的寻址方式有

又是汇编的。。。
计算机是通过执行指令(由操作码字段和操作数字段组成)序列来解决问题的,因而每种计算机都有一组指令集(指令系统)供给用户使用,寻址就是其中之一(如为了找到操作数)。
寻址方式:1)与数据有关的寻址方式 :
a 立即寻址方式:操作数(立即数)直接存放在指令中,紧跟在操作码,作为指令的一部分,这中寻址方式用来表示常数,它经常用于给寄存器赋初值,且只能用于源操作数字段,不能用于目的操作字段,且源操作数长度与目的操作数长度一致。
b 寄存器寻址方式:操作数在寄存器中,指令用来指定寄存器号,不需要访问存储器来取得操作数,速度较快。
c 直接寻址方式:操作数的有效地址(在8086里把操作数的偏移地址叫做有效地址)只包含位移量一种成分,其值就存放在代码段中指令的操作码之后,位移量的指即操作数的有效地址。适用于处理单个变量。
d 寄存器间接寻址方式:操作数的有效地址只包含基址寄存器内容或变址寄存器内容一种成分,因此有效地址就在某个寄存器中,而操作数就在存储器中。适用与表格处理,执行完一条指令后,只需修改寄存器的内容就可以取出表格下一项。
e 寄存器相对寻址方式:操作数的有效地址即为基址或变址寄存器和指令中指定的位移量之和。
f 基址变址寻址方式:操作数的有效地址是一个基址寄存器和一个变址寄存器之和。
g 相对基址变址寻址方式 h 比例变址寻址方式 等等。

2)与转移地址有关的寻址方式。
a 段内直接寻址:转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。
b 段内间接寻址:转向有效地址是一个寄存器或是一个存储单元的内容 。(常用)
c 段间直接寻址 d 段间间接寻址

此外 还介绍一些寄存器 如通用寄存器 AX BX CX DX 也可叫做数据寄存器,可以以字或字节的形式访问, 另外 SP BP SI DI 四个16位寄存器可以像数据寄存器一样在运算时存放操作数,但他们只能以字(16位)为单位使用,此外它们更经常的用途是在存储器寻址时,提供偏移地址,再者有四个专门提供段地址的寄存器,称为段寄存器 有代码段CS 数据段DS 堆栈段SS 附加段ES。

❸ C语言中,如何定义单片机的寄存器

  1. 位地址在汇编语言中,只能直接寻址,不支持间接寻址。那么,在 C 语言中,也就不能用指针来操作。所以不能定义单片机的寄存器。

  2. 访问寄存器可以通过直接地址引用来完成。
    例如52单片机的寄存器有4组,分别为00H-07H,08H-0FH,10H-17H,18H-1FH,各组均8字节,要结合程序状态字寄存器PSW(D0H)中的RS0,RS1的组合来确定是哪一组。
    可以定义一个访问Rn的函数

    typedefunsignedcharuchar;
    uchardacRn(ucharn)//n=[0..7]
    {
    uchardata*p;
    n+=(PSW&0x18);//PSW7:CY6:AC5:F04:RS13:RS02:OV1:F10:P
    //本来要右移三位变为0-3,但由于是8个一组要乘以8(左移3位),所以直接加上寄存器编号就可以了
    return*(uchardata*)n;
    }

❹ c语言访问寄存器的问题

C语言在X86下没有直接操作寄存器的代码,虽然可以使用register关键字声明寄存器变量,但无法指定使用哪一个寄存器;
使用嵌入式汇编可以达到如题所述目的。例如
__asm(mov eax,#01);

❺ 51单片机C语言工作寄存器问题

头文件里定义了PSW
当PSW中的RS1、RS0发生变化时对应的工作区发生相应的变化,对应关系为:
00:工作区0,R0~R7对应地址00H~07H
01:工作区1,R0~R7对应地址08H~0FH
10:工作区2,R0~R7对应地址10H~17H
11:工作区3,R0~R7对应地址18H~1FH
RS1/RS0是靠软件来设置的,你可以根据不同情况自由设置,一般中断时用得较多,避免影响正常流程下的工作寄存器值。

❻ C语言 我是初学者

你说的是16位系统吧,16位系统寄存器是16位的,所以一个寄存器只能寻64K大小的空间,而使用的地址空间确是1M,1M是是2的20次方也就是20位,所以要借用段寄存器4位,加上本身的寄存器的16位,正好是20位,2的20次方是1M

❼ C语言中的寄存器是什么干什么用

寄存器是和硬件有关的,和你的C语言写的程序所运行的平台有关。积存器就是硬件中存放一些数据,变量的地方,有相应的含义。