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

    汇编语言 手记4

    简单的汇编指令 CPU执行后,寄存器中的数据改变为如下: CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。 这个唯一的地址就是物理地址。

    85250发布于 2018-01-17
  • 来自专栏Android点滴分享

    汇编学习(4), 整数,栈,浮点

    本篇介绍 本篇介绍汇编的整数,浮点运算,还有栈。 Incremented:",0 deci db "Number 1 Decremented:",0 sali db "Number 1 Shift left 2 (x4) :",0 sari db "Number 1 Shift right 2 (/4):",0 sariex db "Number 1 Shift right 2 (/4) with : 512 Number 1 Shift right 2 (/4): 32 Number 1 Shift right 2 (/4) with sign extension: -3 The product 这儿会见证一次数字的神奇: 举一个例子, 比如一个8位的寄存器,需要表示 -4,那么结果如下: 0000 0100 => 1111 1011 + 1 1111 1100 (-4 的补码,也就是计算机中真正的存储形式

    49020编辑于 2022-12-07
  • 来自专栏Linux驱动

    汇编指令-str存储指令(4)

    实例1: str   r1,[r2]        ; 将r1中的值存到r2所指定的地址中 str  r1,[r2,#4]   ;将r1中的值存到r2+4所指定的地址中 str   r1,[r2],#4 //每个寄存器4字节,r2=r0+13*4=最后一个存储器寄存器+4 0:  ldr r3, [r0], #4                                       /将r0 的内容存到r3的内容中,同时r0地址+=4; str r3, [r1], #4                                      //将r3的内容存到r1所指的地址中,同时 Tacp<<2)+(B3_PMC)) .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp <<2)+(B4_PMC)) .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<

    2.3K50发布于 2018-01-03
  • 来自专栏我在本科期间写的文章

    4 汇编语言程序设计

    4 汇编语言程序设计 表达式中的运算符和操作符在 x86 汇编语言中的用法。 表达式 表达式是由常数、变量、操作符和运算符组合而成的计算公式。

    33310编辑于 2024-09-13
  • 来自专栏机器学习/数据可视化

    pandas技巧4

    本文中记录Pandas操作技巧,包含: 导入数据 导出数据 查看、检查数据 数据选取 数据清洗 数据处理:Filter、Sort和GroupBy 数据合并 常识 # 导入pandas import pandas

    4.6K20发布于 2021-03-01
  • 来自专栏太阳影的学习记录

    操作系统(4)实验0——准备知识、基本内联汇编、扩展内联汇编

    AT&T: _variable(%eax) Intel: [eax + _variable] AT&T: _array( ,%eax, 4) Intel: [eax × 4 + _array] AT&T: _array(%ebx, %eax,8) Intel: [ebx + GCC提供了两种内联汇编语句:基本内联汇编语句和拓展内联汇编语句。 这是是为了让 gcc 把内联汇编代码翻译成一般的汇编代码时能够保证换行和留有一定的空格。最终GCC编译出来的汇编代码就是双引号里面的内容。 参考资料 32位汇编语言学习笔记(3)--leal和算术运算指令 GCC内联汇编基础 内嵌汇编 %0,%1 是什么

    1K20发布于 2021-10-15
  • 来自专栏全志嵌入式那些事

    全志XR806芯片 汇编代码调试技巧

    1.问题背景 问题平台:XR806 + RTOS 2.问题描述 XR806(M33内核)适配新的RTOS时,沿用M4F的启动代码后出现了系统奔溃,但是expection显示的PC地址和LR地址都被修改 arm汇编中,可利用b .进入死循环。 在汇编中可以利用以下代码打印log: //.c文件中插入 void AsmPrint(void) { printf("var = %#x\n",PrintMagic); } #汇编代码中插入以下代码查看 R0的值 LDR R8,=PrintMagic str R0,[R8] LDR R8,=AsmPrint bx R8 最后发现汇编代码正常,但在运行第一个任务时系统奔溃。 4.解决方法 使用__set_PSPLIM可以设置PSPlimit地址,在不确定PSP限制时,可以__set_PSPLIM(0)取消这个功能,MSP也是相同道理。

    23610编辑于 2024-02-02
  • 来自专栏TechBlog

    汇编语言程序设计技巧详解(附例题)

    4)子程序嵌套须考虑堆栈容量。 (5)提供足够的调用信息: 1.寄存器传送参数 2.存储器传送参数 3.堆栈传送参数 模块化设计 ---- 汇编语言程序设计技巧 四种基本结构:顺序结构、分支结构、循环结构和子程序。 4位互换         ANL  A,#0FH   ;取原来的高4位               ADD  A,#30H   ;转换成ASCII码         MOV  R2,A       ;保存结果 PC ← A+DPTR TAB: AJMP     SUB0  ;转移指令表 AJMP  SUB1 AJMP     SUB2       …… AJMP     SUB6 3、循环结构 循环程序结构是汇编语言程序中常见的一种程序结构 DJNZ R4,LOOP1   ;外循环结束?                 RET 4、子程序 能完成某项特定功能的独立程序段,可被反复调用。 子程序设计 (1)子程序入口用标号作为子程序名。

    1.7K31编辑于 2022-07-20
  • 来自专栏IC知识库平台

    RISC-V 汇编语言程序设计(4汇编语言格式及ABI

    1.汇编语言格式简介 以asm_run_seg.S为例: .equ BYTE_DELAY, 0x00100000 .equ GPIO_ADDR, 0xf0000000 .globl _start _ = x7) goto loop ADDI t3, x0, 0; # t3 = 0 汇编的指示符(directive)的格式使用“.” + 关键词 .globl(注意不是.global 在使用标号时后面跟冒号”:”,比如LOOP: ,_start: 一般汇编指令格式:指令 + 空格 + 寄存器 + “,”+寄存器 + “,” + 寄存器(或立即数),比如 ADDI t3,x0,0;。 也有部分汇编指令只接一个寄存器和立即数,格式为指令 + 空格 + 寄存器 + “,”+ 立即数,比如 LI a3,0x08; 汇编指令以分号”;”结束,常量定义以回车换行结束,没有分号”;”。

    1.6K20发布于 2021-08-03
  • 来自专栏sringboot

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

    屏幕光标控制 索引寄存器的端口号是 0x3d4,可以向它写入一个值,用来指定内部的某个寄存器。 在显卡文本模式下25x80,换行就是+80,移动到行首就是 除以80取商再乘以80 疑问 汇编有函数吗? 一下是我的理解,有如果错误欢迎批评指正。 所以必须明确汇编在运行的时候没有遇到转移指令,call和ret或retf的时候都是一步一步向下执行的。 code_entry dw start dd section.code_1.start realloc_tbl_len dw (header_end-code_1_segment)/4 运行虚拟机显示如下 资源 汇编代码及二进制文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-4-2/code 虚拟机固定大小硬盘

    85530编辑于 2021-12-06
  • 来自专栏MelonTeam专栏

    XCode LLDB调试小技巧基础篇提高篇汇编

    导语: 记录平时用到的XCode LLDB调试小技巧 工欲善其事必先利其器,介绍一些LLDB调试的命令和小技巧~ 基础篇 1.print命令 p 输出基本类型,例如double,int po 输出对象类型 $2 = 0b00000000000000000000000000001010 八进制 (lldb) p/o 10 (int) $3 = 012 十六进制 (lldb) p/x 10 (int) $4 0x000000010e292832 给所有类的某一SELECTOR下断点 br set -S selector (lldb) br set -S initWithFrame: Breakpoint 4: : [Y/n] Y All breakpoints removed. (4 breakpoints) 删除某个断点 br del 断点index(断点list里前面的x.x,例如6.1) (lldb) 汇编篇 1.寄存器 在我们在调试的时候有时候查看寄存器会有很多有用的信息,我们先介绍下函数调用约定 x64模拟器: %rax 作为函数返回值使用。

    5.3K80发布于 2018-01-04
  • 来自专栏sringboot

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

    只需要像如下的写就可以解决这个问题 SECTION mbr align=16 vstart=0x7c00 如果段定义没有vstart=0,那么汇编地址就会从程序开头算起。 [0x0c]段重定位表的开始汇编地址。 加载过程 读取用户程序所在磁盘的扇区,然后加载进内存某个地址,用户程序头部的信息,根据加载的地址修改段重定位表。 问题:为什么要修改重定位表呢? 28 位的扇区号太长,需要将其分成 4 段,分别写入端口 0x1f3、0x1f4、0x1f5 和 0x1f6 号端口。 用户程序重定位,就需要使用加载的地址和汇编里的汇编地址(也就是偏移地址)相加,计算出实际的物理地址,然后通过移位操作,获取段地址,存入到segment定位表里。 运行虚拟机显示如下 资源 汇编代码及二进制文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-4/code 虚拟机固定大小硬盘

    87910编辑于 2021-12-06
  • 来自专栏数据STUDIO

    Python 实用小技巧4

    4、调整字符串中文本的格式 >>> import re >>> log = '2020-11-11' >>> re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', P<d>\d{4})-(?P<m>\d{2})-(?

    54330发布于 2021-06-24
  • 来自专栏酷酷的哀殿

    lldb入坑指北(4)-打印任意函数的汇编代码

    x 命令 实际上,lldb 已经提供了一个方便的工具查看汇编代码。 #0x10] 0x1a8dcb734: 0x910043fd add x29, sp, #0x10 ; =0x10 (lldb) b NSLog Breakpoint 4: str x0, [sp, #0x8] 0x104ee9d2c: 0xf90003e1 str x1, [sp] (lldb) x/3i $pc -> 0x104ee9bc4: 2、以汇编格式打印该地址后方的内容。 ? 下面,我们验证一下上面的汇编内容。 首先,我们先查看通过 Xcode 生成的汇编代码,(655-673行) ? 至此,可以确认,通过 x 命令可以正确打印任意函数的汇编代码 参考文章 GDB to LLDB command map GDB Memory lldb

    3.4K20发布于 2020-10-26
  • 来自专栏乱码三千

    汇编语言之MIPS汇编

    MIPS汇编中的分段处理 .data #数据段 .text #代码段 传送指令 加载立即数指令 li li(load immediate) :用于将立即数传送给寄存器 li $t0,1 ;十六进制数据使用 move 用于将一个寄存器中的数据传送至另一个寄存器当中 move $t0,$t1 # 将寄存器$t1中的数据传送至$t0 系统服务指令 syscall 在C语言中输出文本可以使用printf函数,但是汇编中没有 : scanf("%d",$a); scanf("%d",$b); if(a>b){ printf("YES"); }else{ printf("NO"); } 汇编代码: # 用$t0 ){ s=s+i; i=i+1; } printf("%d",s); 汇编代码: # 用$t0指代i ,$t1指代s .text li $t0 ,1 li $t1 ,0 loop: 0x00000000+0x00000014=0x00000014 使用mips汇编实现二维数组定义 #需求:实现int a[3][3] = {{1, 2, 3}, {5, 6, 7}, { 10, 11

    10.6K31发布于 2021-08-24
  • 来自专栏Android点滴分享

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

    本篇介绍 本篇作为汇编系列的开篇,就先研究下汇编如何写helloworld。 信息,-F dwarf用来指定debug信息格式是dwarf,-l用来生成机器码和汇编的对应文件。 汇编程序一般由data,bss,text 3个段构成, 前面加section就是定义这是某个段。 00000000 68656C6C6F2C20776F- msg db "hello, world",0 3 00000009 726C6400 4 这样就完成了汇编helloworld的学习了。

    1.2K40编辑于 2022-11-28
  • 来自专栏c++与qt学习

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

    汇编语言--高级汇编技术 子程序的封装 程序的多文件组织 汇编指令汇 数据传送指令 算术指令 逻辑指令 串处理指令 控制转移指令 处理机控制与杂项操作指令 汇编伪操作汇 处理机选择伪操作 段定义伪操作 .exe的诞生 程序运行步骤及生成的文件 汇编过程 宏汇编 C语言中的预处理命令 汇编中的宏---由C中的宏定义说起 举例 语法和术语 子程序VS宏定义 宏中的局部标号 变元是操作码的一部分 宏库 条件汇编 mov ss,ax mov sp,16 mov ax,1000 call far ptr s ;调用子程序 mov ax,4c00h mov ss,ax mov sp,16 mov ax,1000 call far ptr subp ;调用子程序 mov ax,4c00h 然后再对应的地址分配下面这个变量内存空间 VAR3 DW 1357H ALIGN伪操作: 包装数组边界从2的整数次幂地址开始 EVEN伪操作: 使下一个变量或指令开始与偶数字节地址 ALIGN 4

    2.2K31编辑于 2022-07-12
  • 来自专栏CSDNToQQCode

    Python编程专属骚技巧4

    四、多行字符串 这个比c方便多了,c打上换行符再加上转义,真的很难受 a='''dvfssd fsdfdsfsd dsdsfbfdfasf afasfaf''' print(a)

    26720编辑于 2022-11-29
  • 来自专栏全栈程序员必看

    Git高阶实战技巧4

    rebase:变基,就是改变 commit 之前依赖的基础 commit。 通过 git pull –rebase,执行变基式的合并,改变 commit 历史,看起来提交历史就是一条直线。

    24720编辑于 2022-06-29
  • 来自专栏汇编语言

    汇编语言】直接定址表(一)—— 「从单元标号到跨段数据:解锁汇编语言的隐藏技巧

    前言 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。 但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底层工作原理,提升代码效率,尤其在嵌入式系统和性能优化方面有重要作用。 本专栏的汇编语言学习章节主要是依据王爽老师的《汇编语言》来写的,和书中一样为了使学习的过程容易展开,我们采用以8086CPU为中央处理器的PC机来进行学习。 assume cs:code code segment a : db 1,2,3,4,5,6,7,8 b : dw 0 start: mov 上面的程序我们还可以写成这样:→→→→ assume cs:code code segment a db 1,2,3,4,5,6,7,8 b

    43010编辑于 2025-01-20
领券