首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏xingoo, 一个梦想做发明家的程序员

    汇编语言 手记2

    汇编由以下3类组成:   1 汇编指令(机器码的助记符)   2 伪指令 (由编译器执行)   3 其他符号 (由编译器识别) 汇编语言的核心是汇编指令,它决定了汇编语言的特性 CPU是计算机的核心部件 一个CPU有N根地址总线,则可以说这个CPU的地址总线的宽度为N 这样的CPU最多可以寻找2的N次方个内存单元。 CPU与内存或其他器件之间的数据传送是通过数据总线来进行的。 汇编指令是机器指令的助记符,同机器指令一一对应 每一种CPU都有自己的汇编指令集 CPU可以直接使用的信息在存储器中存放。 在存储器中指令和数据没有任何区别。

    99080发布于 2018-01-17
  • 来自专栏Hk_Mayfly的学习记录

    汇编语言》课程设计2

    1 assume cs:code,ss:stack 2 stack segment 3 db 128 dup (0) 4 stack ends 5 code segment db '2) start system',0 29 func3 db '3) clock',0 30 func4 db '4) set clock',0 31 boot+7e00h 33 dw offset func1-offset boot+7e00h 34 dw offset func2- zhidao.baidu.com/question/564008138.html int 16的1号程序:https://zhidao.baidu.com/question/511189643.html 总结   汇编的难度并不大 ,我认为在有编程的基础上,学习汇编要做到细致,细致的理解计算机编程的编译过程,对于我理解其他编程语言也有很大的帮助。

    98620发布于 2019-07-30
  • 来自专栏Hk_Mayfly的学习记录

    汇编语言》课程设计2

    jmp boot_begin func0 db 'Hk_Mayfly----XIUXIUXIU~',0 func1 db '1) reset pc',0 func2 db '2) start system',0 func3 db '3) clock',0 func4 db '4) set clock',0 ;相减得到的是标号的相对位置 clock1 db 'F1----change the color ESC----return menu',0 clock2 db 'Please input zhidao.baidu.com/question/564008138.html int 16的1号程序:https://zhidao.baidu.com/question/511189643.html 总结   汇编的难度并不大 ,我认为在有编程的基础上,学习汇编要做到细致,细致的理解计算机编程的编译过程,对于我理解其他编程语言也有很大的帮助。

    1.1K20发布于 2019-07-30
  • 来自专栏电子技术研习社

    arm(2)| 汇编指令和伪指令

    arm汇编有两种风格,ARM官方的ARM汇编风格:指令一般用大写、Windows中IDE开发环境(如ADS、MDK等)常用。如:LDR R0, [R1]。 GNU风格的ARM汇编:指令一般用小写字母、linux中常用。如:ldr r0, [r1]。 二、arm汇编特点 ARM汇编特点1:LDR/STR架构。 ARM汇编特点2:8种寻址方式。 , {r2-r7,r12} 堆栈寻址 stmfd sp!, {r2-r7,lr} 相对寻址 beqflag ARM汇编特点3:指令后缀。 , {R0, R1, R2} 意思为:把sp指向的3个连续地址段(应该是3*4=12字节(因为为r0,r1,r2都是32位))中的数据拷贝到r0,r1,r2这3个寄存器中去。

    3.4K30发布于 2020-07-10
  • 来自专栏IC知识库平台

    RISC-V 汇编语言程序设计(2汇编程序asm_run_led

    使用RISC-V 汇编语言,编写一个led 跑马灯的实验 程序分析: LI x8, 0xf0000000; # 设置gpio address; LI是伪指令,可被编译器翻译成LUI risc-v汇编指令集内无专门用来清零的指令。 LI x7, 0x00400000; # x7 设置delay counter 将值0x0040_0000存储到x7寄存器中。 0x80对应的2进制数是1000_0000。但是目前不能把x10内的值直接输出到gpio的地址上。

    1.8K30发布于 2021-08-03
  • 来自专栏乱码三千

    汇编语言之MIPS汇编

    MIPS汇编中的分段处理 .data #数据段 .text #代码段 传送指令 加载立即数指令 li li(load immediate) :用于将立即数传送给寄存器 li $t0,1 ;十六进制数据使用 将以下c代码转换成mips汇编代码: //求累加之和 //1+2+3+.....+100 int i=1; int s=0; while(i<=100){ s=s+i; ,如果我们要依次打印1,2,3三个整数,那么汇编如下: print1: li $v0,1 li $a0,1 syscall jr $ra print2: li $v0,1 li $a0,2 , 如果使用高级语言进行封装的话,我们一般一个函数就搞定了: void print(int a){ print(a); } 有没有办法使得汇编能像高级语言一样简洁呢? 汇编实现二维数组定义 #需求:实现int a[3][3] = {{1, 2, 3}, {5, 6, 7}, { 10, 11, 12}}; #以下是以 行不动 列轮动的方式实现 .data da:

    10.8K31发布于 2021-08-24
  • 来自专栏sringboot

    x86汇编加载用户程序-4-2

    在显卡文本模式下25x80,换行就是+80,移动到行首就是 除以80取商再乘以80 疑问 汇编有函数吗? 一下是我的理解,有如果错误欢迎批评指正。 所以必须明确汇编在运行的时候没有遇到转移指令,call和ret或retf的时候都是一步一步向下执行的。 segment dd section.code_2.start data_1_segment dd section.data_1.start data_2_segment dd section.data \user2.ASM -o use2r.bin 编译代码,生成二进制文件。 分别写入到虚拟机的vhd的0号位,和100号位。 运行虚拟机显示如下 资源 汇编代码及二进制文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-4-2/code 虚拟机固定大小硬盘

    95930编辑于 2021-12-06
  • 来自专栏c++与qt学习

    汇编语言--高级汇编技术

    调用子程序 mov ax,4c00h int 21h main endp code ends end start 编译和链接步骤如下 masm p1; masm p2; link p1.obj+p2.obj; ---- 汇编指令汇总 每个指令详细用法,大家咨询查询资料,这里只列举出常用的一些汇编指令汇总 数据传送指令 通用数据传送指令 MOV,PUSH,POP SEGMENT OGR 10 //默认分配在0地址处,但是上面有0RG,因此从10地址处进行分配 VAR1 DW 1234H ORG 20 //从20地址处开始分配 VAR2 //$为上面一条指令的地址 ORG $+8 //在$地址的基础上,加8,然后再对应的地址分配下面这个变量内存空间 VAR3 DW 1357H ALIGN伪操作: 包装数组边界从2的整数次幂地址开始 A DB 'morning' EVEN B DW 2 DUP(?) ---- 基数控制伪操作 如果不明确指定,默认使用当前规定的基数,如果在数值末尾明确指定了基数,则不使用全局默认基数。

    2.3K31编辑于 2022-07-12
  • 来自专栏Android点滴分享

    汇编学习(1),汇编之helloworld

    本篇介绍 本篇作为汇编系列的开篇,就先研究下汇编如何写helloworld。 信息,-F dwarf用来指定debug信息格式是dwarf,-l用来生成机器码和汇编的对应文件。 最后再看下生成的lst文件: 1 ; hello.asm 2 section .data 3 00000000 68656C6C6F2C20776F- msg db "hello, world",0 3 00000009 726C6400 这样就完成了汇编helloworld的学习了。

    1.3K40编辑于 2022-11-28
  • 来自专栏Android点滴分享

    汇编学习(2),数据表示与寄存器

    , 10,0 msg2Len equ $-msg2-1 radius dq 357 pi dq 3.14 section .bss section .text rdi,1 mov rsi, msg1 mov rdx,msg1Len syscall mov rax, 1 mov rdi,1 mov rsi, msg2 mov rdx, msg2Len syscall mov rsp, rbp ; epilogue pop rbp mov rax,60 mov rdi,0 syscall 编译后用gdb 加载并执行disassemble main,这时候会发现汇编是att格式的,如下: image.png 而我们写的汇编是intel风格的,这时候可以设置下 flavor,set disassembly-flavor intel, 再反汇编看下,就会看到格式变成intel了: image.png 这时候再简单提下prologue和epilogue对于gdb

    79030编辑于 2022-12-02
  • 来自专栏Republic博客

    汇编语言_汇编语言程序

    可以来看一段汇编源程序 assume cs:codesg codesg segment mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21h codesg ends end 开头和结尾的两句代表伪指令 只有编译器可以读懂 汇编指令可以被翻译为机器码最终被cpu执行 汇编程序 就是包含汇编指令和伪指令的文本 mov ax,4c00h int 21h 跟C语言程序的return 0一样 返回控制权 一个汇编程序是由多个段组成的 这些段被用作各种空间来使用 一个有意义的汇编程序至少需要一个段 且每个段都需要段名 段名 segment- -段的开始 段名 ends--段的结束 assume假设 含义是假设某一段寄存器和程序中我们定义的段名关联起来 可以理解为和变量的引用一个意思 利用汇编程序计算2^3 assume cs:code code segment mov ax,2 add ax,ax add ax,ax code ends end 汇编程序的编写不是我学习的重点,这里直接跳过 需要的可以自己去看一下 [...]的规定与(

    1.2K20编辑于 2023-11-14
  • 来自专栏逆向技术

    汇编知识扫盲之常见汇编指令

                   汇编知识扫盲之常见汇编指令 一、数据传输指令     它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.         (0-255,即         0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )     NOP 不执行指令.CPU执行到这条指令的时候会待机.所以这个指令只为填充字节. 2. lea eax,[0x0040100] 把地址给eax eax = 00401000 也快进行计算 lea eax[ebx + 4 * 2];      例: LEA DX,string ;把偏移地址存到 的距离内)     ( 当且仅当(SF XOR OF)=1时,OP1<OP2 )     JA/JNBE 不小于或不等于时转移.      六、伪指令 DW   定义字(2字节).     PROC  定义过程.     ENDP  过程结束.     SEGMENT 定义段.     ASSUME 建立段寄存器寻址.     

    2.1K20发布于 2019-05-25
  • 来自专栏HelloCode开发者学习平台

    汇编(三)

    高速缓存 iPhoneX上搭载的ARM处理器A11它的1级缓存的容量是64KB,2级缓存的容量8M. CPU每执行一条指令前都需要从内存中将指令读取到CPU内并执行。 向量寄存器 128位:V0-V31 作者:请叫我Hank 链接:https://www.jianshu.com/p/e85e2d64ed1e 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处

    90010编辑于 2023-03-23
  • 5.7 汇编语言:汇编高效乘法运算

    汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。 在汇编语言中,乘法指令通常是通过mul(无符号乘法)和imul(有符号乘法)这两个指令实现的。 中如果乘数与被乘数都是16位 将把AX做乘数,结果放在EAX中如果乘数与被乘数都是32位 将把EAX做乘数,结果放在EDX:EAX中乘法指令计算很简单,只需要累加乘数即可,如下所示则是一个简单的计算三个数相乘的汇编实现 但读者需要注意,在使用LEA计算乘法时必须要保证乘数是2的次幂,并且乘数的范围必须是2/4/8这三个区间才可使用该指令,我们使用汇编来实现计算eax*8+2汇编指令如下。 ) = 5eax 最后得出 10eax + 5eax4.经过该过程可得出 eax * 15 = 45 最终计算3*15=45得到最终结果.这个计算过程看似复杂,但如果将其转化为汇编指令那么只需要两条即可实现快速乘法运算

    76620编辑于 2023-08-23
  • 5.8 汇编语言:汇编高效除法运算

    .4.使用 neg eax 将计算后的正数反转为负数.这个过程通过汇编语言实现代码很简单,如下代码演示了除数为正数且被除数为 -2/-4/-8 次幂的计算过程..data x DWORD ? 例如,将-16除以-8,即计算-16/-8的结果,因为8是2的3次幂,所以我们可以通过算数右移指令来完成除法,然后再取反获得正确的结果:将-16右移3位,得到-2。对-2进行取反,得到2。 先来看一段汇编代码,我们此时已知 M = 055555556h 且 edx = N 带入公式 2^(32+N) / M 由于edx没有变化所以此处应计算 2^32 / 055555556h = 2.9999 即可计算出此处的除数是3,而被除数则是ecx寄存器内的值,我们即可得知该段汇编指令在进行 ecx / 3 的计算流程。 将q1乘以k,并将结果右移32位,得到kq1的高32位,记为q2,即q2 = floor( k * q1 / 2^32 ) 。

    1.5K50编辑于 2023-08-23
  • 来自专栏HelloCode开发者学习平台

    汇编(五)

    接下来我们看下这个Demo 新建项目(单个视图的空项目) CMD + SHIFT + N 选择真机(如果是模拟器汇编指令将不一样) CMD + N 新建文件,选择 Assembly File( Empty也可以,后缀名加上.s就OK) 写点汇编代码 来到main.m文件 运行的结果是怎样?

    49810编辑于 2023-03-23
  • 来自专栏若尘的技术专栏

    初学汇编

    什么是汇编器和链接器? 汇编器(assembler):用于将汇编语言源程序转换为机器语言 链接器(linker):一种工具程序,把编译器生成的单个文件组合成一个可执行文件 寄存器(register):是 CPU 中被命名的存储位置 汇编语言于机器语言是一对一(one-to-one)的关系:每一条汇编语言指令对应一条机器语言指令。 C++ 和 Java 与汇编语言有什么关系? 汇编语言是不可移植的。因为它是为特定处理器系列设计的。汇编语言会直接与计算机体系结构相匹配。 汇编语言有规则吗? 大多数汇编语言规则都是以目标处理器及其机器语言的物理局限性为基础的。如:CPU 要求两个指令操作数的大小相同。汇编语言的规则较少。

    1.4K117发布于 2021-05-22
  • 来自专栏HelloCode开发者学习平台

    汇编(二)

    寄存器 内部部件之间由总线连接 对程序员来说,CPU中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制 不同的CPU,寄存器的个数、结构是不相同的 通用寄存器 ARM64拥有有31个64位的通用寄存器 x0 到 x30,这些寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途) 那么w0 到 w28 这些是32位的. 因为64位CPU可以兼容32位.所以可以只使用64位寄存器的低32位. 比如 w0 就是 x0的低32位! 通常,CPU会先将内存中的数据存储到通用寄

    1K20编辑于 2023-03-23
  • 来自专栏HelloCode开发者学习平台

    汇编(七)

    函数的局部变量 接下来我们新建项目,在main.m文件中写下如下代码 断点断住sum函数.我们看看sum函数内部的汇编. 我们可以看到.sp拉伸了16个字节. 接下来我们修改一下代码在看看sum函数的汇编 接来下sum函数里面.栈拉伸了32个字节(ARM64中对sp的操作是16字节对齐的,也就是16的整数倍). 我们来看下下面的案例: 从汇编可以看出.我们一旦是嵌套调用,就立刻多开辟了16个字节的空间. 因为只要是嵌套调用,我们需要保护x29和x30两个寄存器(本函数调用的返回地址,"回家的路").

    67320编辑于 2023-03-23
  • 来自专栏程序技术知识

    汇编指令

    汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL、JNL、JNG、JG、JCXZ、JECXZ、JMP、JMPE 名称 功能 操作数 操作码 模数 寄存器 1 寄存器2 或内存 位移量 立即数 符号 方向 芯片 型号 16位 32位 JO 溢出跳转 短 $70 无 无 无 无 10 无 无 8086 无 无 JNO 不溢出跳转 短 $71 无 无 无 无

    2.1K10编辑于 2021-12-20
领券