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

    汇编语言 手记3

    从读写属性上存储器分为:随机存储器RAM和只读存储器ROM 从功能和连接上分类: 随机存储器RAM 装有BIOS的ROM 接口卡上的RAM 上述的存储器物理上是独立的器件。 但是它们在一下两点上相同:

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

    汇编学习(3),ddd以及跳转循环

    wNum dw 12345 dNum dd 1234567890 qNum1 dq 1234567890123456789 qNum2 dq 123456 qNum3 , -1 mov rax, qword [qNum1] mov qword [qNum2], rax mov rax, 123456 movq xmm0, [qNum3] 因此可以得出以下关键结论: 用8,16位数字给64位寄存器赋值,不会清空高位 用32位数字给64会寄存器赋值,会自动清空高位 sasm 接下来安装一个汇编的IDE,sudo apt install nsam

    57830编辑于 2022-12-02
  • 来自专栏叶子的开发者社区

    LC-3 汇编语言 Nim游戏

    @_@汇编T_T 题目描述 Nim是一个简单的双人游戏,可能起源于中国。游戏中使用的计数器类型有很多种类,如石头、火柴、苹果等。 st r3,num_a ld r3,sum_abc add r3,r3,r0 brz win1 st r3,sum_abc br save test1b ld r0,char_b add r0 r0,r0 add r0,r0,#1 add r3,r0,r3 brn error1 st r3,num_b ld r3,sum_abc add r3,r3,r0 brz win1 st r0,#1 add r0,r0,r3 brn error1 ld r3,num_c not r0,r0 add r0,r0,#1 add r3,r0,r3 brn error1 st r3 r0,r0 add r0,r0,#1 add r3,r0,r3 brn error2 st r3,num_b ld r3,sum_abc add r3,r3,r0 brz win2 st

    43820编辑于 2023-07-30
  • 来自专栏叶子的开发者社区

    LC-3 汇编语言 中断实验

    3.操作系统应该设置KBSR的IE(Interrupt Enable)位。

    56910编辑于 2023-07-30
  • 来自专栏sringboot

    汇编语言完成1到100累加-3

    代码 ; 完成1到100累加,并显示在屏幕上 jmp near start message db "1+2+3+...+100=" start: mov ax,0x7c0 mov 运行虚拟机显示如下 资源 汇编代码及二进制文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-3/code 虚拟机固定大小硬盘 vhd文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-3 vhd写入工具:https://github.com/duofanCoder

    1.4K20编辑于 2021-12-06
  • 来自专栏Linux驱动

    汇编指令-bic(位清除)、orr(位或)(3)

    指令示例: orr R0,R0,#0xd3 ;将R0的第[7:0]位与b'1101 0011按位或,并保存在R0中 3.eor异或指令(exclusive or) eor指令的格式为: eor{条件}{ // 读状态寄存器cpsr的数据到r0中 bic r0,r0,#0x1f // 对r0低5位进行清0,清除模式位 orr r0,r0,#0xd3

    6.1K60发布于 2018-01-03
  • 来自专栏乱码三千

    汇编语言之MIPS汇编

    MIPS汇编中的分段处理 .data #数据段 .text #代码段 传送指令 加载立即数指令 li li(load immediate) :用于将立即数传送给寄存器 li $t0,1 ;十六进制数据使用 move 用于将一个寄存器中的数据传送至另一个寄存器当中 move $t0,$t1 # 将寄存器$t1中的数据传送至$t0 系统服务指令 syscall 在C语言中输出文本可以使用printf函数,但是汇编中没有 ,如果我们要依次打印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); } 有没有办法使得汇编能像高级语言一样简洁呢? 2)*4=0x00000000+0x00000014=0x00000014 使用mips汇编实现二维数组定义 #需求:实现int a[3][3] = {{1, 2, 3}, {5, 6, 7}, { 10

    10.7K31发布于 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 这样就完成了汇编helloworld的学习了。

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

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

    汇编语言--高级汇编技术 子程序的封装 程序的多文件组织 汇编指令汇 数据传送指令 算术指令 逻辑指令 串处理指令 控制转移指令 处理机控制与杂项操作指令 汇编伪操作汇 处理机选择伪操作 段定义伪操作 .exe的诞生 程序运行步骤及生成的文件 汇编过程 宏汇编 C语言中的预处理命令 汇编中的宏---由C中的宏定义说起 举例 语法和术语 子程序VS宏定义 宏中的局部标号 变元是操作码的一部分 宏库 条件汇编 的指令系统 80x86新增指令 条件设置指令 Intel系列微处理器的3种工作模式 ---- 子程序的封装 这是我们之前调用子程序的写法 下面给出的是c语言中程序的写法,可以看到max函数其实就是一段子程序 从20地址处开始分配 VAR2 DW 5678H //$为上面一条指令的地址 ORG $+8 //在$地址的基础上,加8,然后再对应的地址分配下面这个变量内存空间 VAR3 表示extend ---- 80x86寻址方式 ---- 80x86的指令系统 ---- 80x86新增指令 ---- 条件设置指令 设置的是标志寄存器的值 ---- Intel系列微处理器的3种工作模式

    2.2K31编辑于 2022-07-12
  • 来自专栏Republic博客

    汇编语言_汇编语言程序

    int 21h codesg ends end 开头和结尾的两句代表伪指令 只有编译器可以读懂 汇编指令可以被翻译为机器码最终被cpu执行 汇编程序 就是包含汇编指令和伪指令的文本 mov ax,4c00h int 21h 跟C语言程序的return 0一样 返回控制权 一个汇编程序是由多个段组成的 这些段被用作各种空间来使用 一个有意义的汇编程序至少需要一个段 且每个段都需要段名 段名 segment- -段的开始 段名 ends--段的结束 assume假设 含义是假设某一段寄存器和程序中我们定义的段名关联起来 可以理解为和变量的引用一个意思 利用汇编程序计算2^3 assume cs:code end assume cs:code code segment mov ax,0fffh mov ds,ax mov bx,6 mov al,[bx] mov ah,0 mov dx,0 mov cx,3 s:add dx,ax loop s mov ax,4c00h int 21h code ends end 计算ffff:0000字节单元中的数乘以3,结果存储在dx中 段前缀的使用 我们在debug会遇到写入时候是

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

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

                   汇编知识扫盲之常见汇编指令 一、数据传输指令     它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.         I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )      输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,      其范围是 0-65535. 3. JS   符号位为 "1" 时转移. 3>循环控制指令(短转移)     LOOP      CX不为零时循环.     LOOPE/LOOPZ  CX不为零且标志Z=1时循环.     

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

    汇编(三)

    对于arm64系的CPU来说, 如果寄存器以x开头则表明的是一个64位的寄存器,如果以w开头则表明是一个32位的寄存器,在系统中没有提供16位和8位的寄存器供访问和使用。其中32位的寄存器是64位寄存器的低32位部分并不是独立存在的。

    85310编辑于 2023-03-23
  • 来自专栏汇编语言

    汇编语言】转移指令的原理(一) —— 新手必看:3步掌握汇编语言中的跳转

    前言 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。 但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底层工作原理,提升代码效率,尤其在嵌入式系统和性能优化方面有重要作用。 本专栏的汇编语言学习章节主要是依据王爽老师的《汇编语言》来写的,和书中一样为了使学习的过程容易展开,我们采用以8086CPU为中央处理器的PC机来进行学习。 1. 操作符 offset 2.1 如何使用 offset 操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。 ,第一条指令长度为3个字节,则s的偏移地址为3

    80510编辑于 2024-11-21
  • 来自专栏若尘的技术专栏

    初学汇编

    什么是汇编器和链接器? 汇编语言于机器语言是一对一(one-to-one)的关系:每一条汇编语言指令对应一条机器语言指令。 C++ 和 Java 与汇编语言有什么关系? int y; int x = (y + 4) * 3;// 与之对应的汇编 mov eax,y ; y 送入 EAX 寄存器 add eax,4 ; EAX 寄存器内容加 4 mov ebx,3 ; 3 送入 EBX 寄存器 imul ebx ; EAX 与 EBX 相乘 mov X,eax ; EAX 的值送入 X 汇编语言可移植吗? 汇编语言有规则吗? 大多数汇编语言规则都是以目标处理器及其机器语言的物理局限性为基础的。如:CPU 要求两个指令操作数的大小相同。汇编语言的规则较少。

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

    汇编(二)

    通常,CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算 假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间 CPU首先会将红色内存空间的值放到

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

    汇编(七)

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

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

    .4.使用 neg eax 将计算后的正数反转为负数.这个过程通过汇编语言实现代码很简单,如下代码演示了除数为正数且被除数为 -2/-4/-8 次幂的计算过程..data x DWORD ? 例如,假设要计算-27除以8的值,我们可以按照如下步骤进行计算:计算27除以8的值,得到商3和余数3。因为被除数为负数,所以对商取反,得到-3。 例如,将-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 的计算流程。

    1.4K50编辑于 2023-08-23
  • 5.7 汇编语言:汇编高效乘法运算

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

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

    汇编指令

    汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL、JNL、JNG、JG、JCXZ、JECXZ、JMP、JMPE 名称 功能 操作数 操作码 模数 寄存器 不大于跳转 近 $0F8E 无 无 无 无 10 无 无 386 $66 无 JG 大于跳转 近 $0F8F 无 无 无 无 10 无 无 386 $66 无 JCXZ 计数一六零跳转 位移8 $E3 无 无 无 无 10 无 无 8086 无 $67 JECXZ 计数三二零跳转 位移8 $E3 无 无 无 无 10 无 无 386 $67 无 JMP 跳转 寄16 $FF 11 100 3 无 无 无 无 8086 无 $66 JMP 跳转 寄32 $FF 11 100 3 无 无 无 无 386 $66 无 JMP 跳转 16[寄16] $FF 00 100 5 无 无 无 无 8086 无 $6766 无 无 无 无 IA64 无 $66 JMPE 跳转扩展 寄32 $0F00 11 110 3 无 无 无 无 IA64 $66 无 JMPE 跳转扩展 16[寄16] $0F00 00 110 5 无

    2K10编辑于 2021-12-20
  • 5.6 汇编语言:汇编高效数组寻址

    汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。 在汇编语言中,实现多维数组的寻址方式相对于C语言来说稍显复杂,但仍然可行。下面介绍一些常用的汇编语言方式来实现多维数组的寻址。 例如,假设有一个大小为10的整型数组a,可以使用以下汇编代码来访问其中一个元素(如a3):lea esi, [a] ; 将数组a的地址存储到esi中mov eax, dword 例如,假设有一个二维数组a3,可以使用以下汇编指令来访问数组元素:mov eax, [a + ebx * 4 + ecx * 4 * 3] ; 访问a[ebx][ecx]元素其中,a是数组的基地址,ebx 假设有一个三维数组c[2][3][4],可以使用以下汇编指令来访问数组元素:lea esi, [c] ; 将数组c的地址存储到esi中mov eax, dword ptr [esi + (i*3+j)*

    74730编辑于 2023-08-23
领券