首页 > 编程语言 >汇编语言

汇编语言

时间:2023-09-07 18:33:37浏览次数:42  
标签:汇编语言 IP 地址 指令 寄存器 CS ax

汇编语言

1.1.1

    汇编语言有3类指令组成:

  1. 汇编指令,机器码的助记符,有对应的机器码
  2. 伪指令,没有对应的机器码,由编译器执行,计算机不执行
  3. 其它符号,如加减乘除

寄存器:

    CS和IP 这两个寄存器指向的地址是CPU将要执行的指令,其中,CS寄存器是段地址,IP是偏移地址。

    栈顶也有两个寄存器指向栈顶的地址,它们是段寄存器SS,寄存器SP,其中,SS这个寄存器放着的是栈顶的段地址,SP这个寄存器放着的是栈顶的偏移地址

1.1.2

    汇编语言的几条汇编指令和一知识

    Mov 指令

        mov ax,bx    代表的意思是,将bx的值给ax,相当于ax=bx

        mov ax,3F56H 是说将3F56H这个值给到ax,相当于ax=3F56H

        

    Add 指令

        这个是相加的指令

        add    ax,bc 相当于 ax = ax+bx

        

    sub 指令

        这个是相减的指令

        sub ax,bc 相当于 ax = ax-bx

        

    CS和IP

        CS和IP都遵循CSx16+IP=CPU接下来将要执行的指令的地址

        CS和IP是CPU接下来执行指令的地址

    jmp 指令

        jmp 段地址:偏移地址

        jmp 21E3:3 代表的意思是:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令

        jmp 3:0B16,CS=0003H,IP=0B16H,CUP会去00B46H处读取指令

        jmp 寄存器

        jmp ax,        (注,这里没写错,逗号后面就是没有)这样写的话会修改CS,IP中IP的值,会把ax的值给到IP,比如ax=0003H而在没有执行这条命令之前呢,CS=3C21H,IP=1AF5H,在执行完之后会变成,CS=3C21H,IP=0003H,相当于 mov IP,ax

1.1.3    DOS中的Debug

    在Debug中有几个功能

        R    可以查看和改变寄存器的内容

        D    查看内存中内容

        E    改写内存中的内容

        U    将内存中的机器指令变成汇编指令

        T    执行一条机器指令

        A    以汇编指令的格式在内存中写入一条机器指令

    使用R指令来修改寄存器值

        

        -r 寄存器的名称,当出现:时,后面输入的值就是你要将寄存器修改的值,可以使用-r来查看

    使用D来查看内存中的内容

  1. 可以直接输入d来查看预设的内存
  2. 可以输入d 段地址:偏移地址
  3. 可以输入d 段地址:开始的偏移地址 结束的偏移的地址
  4. 当我们输入了段地址和偏移地址去查看了某一段内存之后呢,继续输入d可以查看之前段地址偏移地址后的内存
  5. 注意,它分为了3部分,前面那部分呢是,段地址和偏移地址组成的,中间的那部分是它的16进制,在后面那部分,是前面16进制转换为ASCII的字符,我截图的部分,目前因为没有数据,所以是……,在中间部分呢,有一个 – 这个告诉我们说,前面是0-7后面是9-16

使用E来改写内存中的内容

  1. 在上面可以看到把1000:80到1000:88的内容修改为了1-9,还可以和第二张图片一样,一个一个的去设置,小数点后面的是你想设置的值,只需要设置好了之后,按一下空格,进去下一个设置,如果不输入值,直接按空格,等会不对这个内存进行改写

    1、还可以用这样的方法进行修改

U指令

    

    这样就可以把机器语言翻译为汇编语言

T指令

    输入-t之后呢,会执行CS、IP指向的指令,每输入一次,就执行一下

A指令

    

这个便是A指令,就是说你这边输入汇编的指令,它会帮你转为机器指令,如果你编辑好了之后呢,还没有满足你的需要可以继续输入a来编辑后续的东西

1.1.4    DS

    在寄存器中有一个寄存器叫DS,DS这个寄存器呢,是一个段地址寄存器。

    为了解释清楚这个段地址的寄存器,看下面的几条指令:

        mov ax,1000

        mov ds,ax

        mov al,[0]

    这三条语句是说把1000:0这个地址的内存单元的值给al

    第一条指令是把,1000这个值给ax,然后又把ax的值给了ds,mov al,[0] 这里的[0]是内存地址的偏移地址,它的段地址是ds

    mov al,[0]这里[0]是偏移地址,那它的段地址是那个呢?一般使用mov获取某个内存单元的值的时候,它的段地址是ds这个寄存器的值,因为ds是一个段地址的寄存器,我们可以看到前面两个指令是有点折腾的,没有将1000H这个值直接给ds,那是因为不允许直接将段地址给ds,只能代换一个。

1.1.5    两个单元

    一个字型数据占用两个单元

1.1.6    栈

    栈,先进后出

    有关于栈的两个寄存器SS和SP

    栈顶的地址是从高地址往低地址去的,10010->10000这样的

    入栈的时候地址是减的,出栈的时候地址是加的

    假如栈的空间为10个,如果超出栈的控件呢,假如是继续往栈里面添加数据的时候,栈会自动去减,将接着的地址给占用(不是栈的空间哦)并且覆盖这个位置原本的数据

标签:汇编语言,IP,地址,指令,寄存器,CS,ax
From: https://www.cnblogs.com/zytlk/p/17685789.html

相关文章

  • 1-8汇编语言程序上机调试
    COM_8255EQU0273H ;8255控制口PA_8255EQU0270HPB_8255EQU0271HPC_8255EQU0272H_STACKSEGMENTSTACKDW100DUP(?)_STACKENDSDATASEGMENTWORDPUBLIC'DATA'DATAENDSCODESEGMENTSTARTPROCNEARASSUMECS:CODE,DS:DATA,SS:_STACK......
  • 汇编语言编译环境搭建(MASM+NASM)
    (目录)一、Windows1.下载相关软件DOSBox官网:https://sourceforge.net/projects/dosbox/下载:DOSBox0.74-3-win32-installer.exeMASM5.0网上可以下载2.配置环境双击之后,修改配置文件:windowresolution=1024x768output=ddraw在DOSBox模拟器中挂载MASM5.0mountc:d......
  • 5.13 汇编语言:仿写For循环语句
    循环语句(for)是计算机编程中的一种基本控制结构,它允许程序按照指定的次数或范围重复执行一段代码块。for循环在处理需要进行迭代操作的情况下非常有用,它使得程序可以更加方便地控制循环的次数。一般来说,for循环由三个部分组成:初始化部分、条件表达式和更新部分,以及一个需要重复执行......
  • 5.14 汇编语言:仿写Switch选择结构
    选择结构,也称为switch语句,是计算机编程中的一种控制结构,用于根据表达式的值选择不同的执行路径。它允许程序根据表达式的值来决定执行哪个代码块,从而实现多分支选择逻辑。switch语句由一个表达式、多个case标签以及对应的代码块组成。程序会将表达式的值与每个case标签进行匹配,一......
  • 《Windows 汇编语言入门教程》 -- 系列教程
    5.12汇编语言:仿写While循环语句5.11汇编语言:仿写IF条件语句5.10汇编语言:汇编过程与结构5.9汇编语言:浮点数操作指令5.8汇编语言:汇编高效除法运算5.7汇编语言:汇编高效乘法运算5.6汇编语言:汇编高效数组寻址5.5汇编语言:函数调用约定5.4汇编语言:算数......
  • 5.10 汇编语言:汇编过程与结构
    过程的实现离不开堆栈的应用,堆栈是一种后进先出(LIFO)的数据结构,最后压入栈的值总是最先被弹出,而新数值在执行压栈时总是被压入到栈的最顶端,栈主要功能是暂时存放数据和地址,通常用来保护断点和现场。栈是由CPU管理的线性内存数组,它使用两个寄存器(SS和ESP)来保存栈的状态,SS寄存......
  • 5.11 汇编语言:仿写IF条件语句
    条件语句,也称为IF-ELSE语句,是计算机编程中的一种基本控制结构。它允许程序根据条件的真假来执行不同的代码块。条件语句在处理决策和分支逻辑时非常有用。一般来说,条件语句由IF关键字、一个条件表达式、一个或多个代码块以及可选的ELSE关键字和对应的代码块组成。条件表达式的结果......
  • 5.12 汇编语言:仿写While循环语句
    循环语句(While)一种基本控制结构,它允许程序在条件为真的情况下重复执行一段代码块,直到条件为假为止。循环语句在处理需要重复执行的任务时非常有用,它可以让程序更加高效地处理大量数据或者重复性操作。一般来说,While循环由一个条件表达式、一个代码块组成。在每次循环迭代开始时,程......
  • 5.8 汇编语言:汇编高效除法运算
    通常情况下计算除法会使用div/idiv这两条指令,该指令分别用于计算无符号和有符号除法运算,但除法运算所需要耗费的时间非常多,大概需要比乘法运算多消耗10倍的CPU时钟,在Debug模式下,除法运算不会被优化,但Release模式下,除法运算指令会被特定的算法经过优化后转化为为乘法,这样就可以提高......
  • 5.9 汇编语言:浮点数操作指令
    汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。浮点运算单元是从80486处理器开始才被集成到CPU中的,该运算单元被称为FPU浮点......