操作系统补充知识

本文介绍了汇编语言的基本概念,包括其与机器语言的关系、指令和符号使用,以及常见的x86和ARM汇编语言的应用。同时详细讲解了CS和IP在x86架构中的作用,以及在二进制和十六进制层面的地址计算方法。
摘要由CSDN通过智能技术生成

1.什么是汇编语言

汇编语言(Assembly Language)是一种低级编程语言,它是面向机器的程序设计语言,也是二进制指令的文本形式,与指令是一一对应的。汇编语言的实质和机器语言相同,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。汇编语言同样需要编程者将每一步具体的操作用命令的形式写出来。

汇编程序通常由指令、伪指令和宏指令组成。汇编语言的每一句指令只能对应实际操作过程中的一个很细微的动作。汇编语言中的指令是用助记符(mnemonic)代替机器指令的操作码,用地址符号(symbol)或标号(label)代替指令或操作数的地址。这种用符号代替机器语言二进制码的方式,增强了程序的可读性并且降低了编写难度。例如,用"ADD"代表加法操作指令,"SUB"代表减法操作指令,以及"INC"代表增加1,"DEC"代表减去1,"MOV"代表变量传递等。

汇编语言是直接面向处理器的程序设计语言,处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。

2.常见的汇编语言包括:

  1. x86汇编语言:基于x86架构处理器的汇编语言,主要应用于DOS、Windows等操作系统中的程序开发。常见的x86汇编语言有Intel汇编和AT&T汇编。
  2. ARM汇编语言:基于ARM架构处理器的汇编语言,主要应用于嵌入式系统、移动设备(如智能手机和平板电脑)等领域。ARM汇编语言通常用于驱动程序、操作系统内核和实时运行程序的编写。

3.CS和IP是什么

在计算机体系结构中,CS(Code Segment,代码段寄存器)和IP(Instruction Pointer,指令指针寄存器)是x86架构中的两个重要寄存器。CS寄存器存储了当前执行的代码段的基地址,而IP寄存器则存储了在该代码段中当前要执行的指令的偏移地址。

进制计算案例:

在16位实模式下,CS(代码段寄存器)和IP(指令指针寄存器)共同确定了一个20位的线性地址。这个线性地址是通过将CS寄存器的值左移4位(即乘以24或16),然后加上IP寄存器的值来计算的。

  1. 在二进制层面左移
    • 当我们说将0x07c0左移四位时,实际上是在二进制层面进行的操作。0x07c0在二进制中表示为00000111 11000000
    • 左移四位意味着将这个二进制数向左移动四位,右侧用零填充,得到00000111 11000000 00000000
    • 这个新的二进制数等于0x7c00
  2. 在十六进制层面左移
    • 当我们说在十六进制下左移时,实际上是指跳过二进制层面的转换,直接在十六进制数上进行操作。
    • 在十六进制中,左移一位相当于乘以16。因此,左移四位相当于连续乘以16四次,即乘以164。
    • 由于0x07c0左移四位,相当于在十六进制下乘以164,这会导致数值变为0x7c00
  • 在二进制中,左移一位相当于乘以2。
  • 在十六进制中,左移一位相当于乘以16(因为十六进制是基数为16的数制)。

对于0x07c0来说,如果我们想要理解它在十六进制下的左移操作,我们可以这样考虑:

原始十六进制数:0x07c0

在二进制中的表示:00000111 11000000

左移四位后(即在二进制中左移16位),我们得到:

左移后的二进制数:00000111 11000000 00000000 00000000

转换回十六进制,我们得到:0x7c00

所以,虽然在十六进制表示中,0x07c0看起来像是只向左移动了一位(因为从0x07c0变成了0x7c00),但实际上在二进制层面,它是向左移动了四位(或者说在十六进制层面移动了一位,但每一位代表四个二进制位)。

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值