Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
 Assembly_IT技术博客_编程技术问答 - 「Fatal编程技术网」

Assembly 是否有汇编的代码约定(主要是PIC)?

汇编(主要是PIC)有代码约定吗?我不认为有任何正式的规定,但阅读他们网站上的代码示例可以让你领略到常见的习惯用法。只是要知道,有许多不同的爱好者的“贡献”,他们可能不是很好 也检查其他项目,大多数都会有难看的代码;但你会发现一两颗宝石 我从不在PIC上编程,但喜欢阅读代码。我模模糊糊地记得一个“实时操作系统”,它有一个非常好和干净的执行流程。我不记得编码风格有多一致,但我从这里开始 最好是阅读其中的大部分,当它像散文一样简单时,你就会发现你的风格我能够找到你可能感兴趣的风格。在编写汇编时,对每

Assembly 理解arm汇编代码结构的问题

代码如下所列,我想在结尾部分知道 0000e0b4 001d22d0 ldrsbeq r2, [sp], -r0 因为它加载了在结束部分中定义的地址,所以它会对这行代码进行计算吗 0000e03c e59f4070 ldr r4, [pc, #112] ; 0xe0b4 为什么代码以这种方式组织 -[Cube message1]: 0000e02c e92d40f0 push {r4, r5, r6, r7, lr} 0000e030 e28

Assembly eax与其他寄存器的不同行为

我已经编写了一个小的汇编代码段(Gas,32位),它接受一个命令行参数,计算其字符数,如果字符串有一定的长度(仅用于调试目的),则打印该字符串。我对汇编还比较陌生,所以我很确定我在这里遗漏了一些东西,因为当我在eax中存储字符串时,与ecx、edx或esi相比,我得到了不同的行为 下面是片段。用eax替换esi时,无论字符串有多长,循环只输入两次,因此计数器(ebx)始终为1。使用esi或其他寄存器,一切似乎都正常工作 .section .text .globl _start _start:

Assembly 在GNU汇编程序中声明固定长度的填充字符串

我试图在assembler中以固定大小的结构定义一些数据。我想声明固定字节数的字符串数据,用字符串初始化。在C中是: char my_string[32] = "hello"; 它是32个字节,并在末尾填充了所需的任意多个零 汇编程序中的等价物是什么?我知道我可以手动计算字符串的长度,并声明需要填充到32的零字节数,例如: my_string: .asciz "hello" .zero 26 但是,如果字符串是动态定义的,比如从外部定义或包含中定义的,我该怎么做呢?您描述的仍然是一个

Assembly 程序集中有多个参数

像这样的多个参数在x86程序集中做什么。例如,以下两个说明: mov-0x4(%edi,%esi,4),%eax lea(%edi,%esi,4),%ebx 我不愿意发布所有的汇编代码,因为这是一个大学项目,我的老师可能不希望我在网上发布。感谢您的帮助。第一条指令将地址(%edi+%esi*4)-4处的(32位)值加载到%eax中。第二条指令将%ebx设置为:(%edi+%esi*4)第一条指令将地址(%edi+%esi*4)-4处的(32位)值加载到%eax中。第二个选项将%ebx设置为:(%

Assembly 使用汇编8086搜索阵列

我正在为一门课做作业,我被困在这里了。我需要做的是在双字数组中搜索指定的双字值。以下是我现在拥有的: ; DriverSub assembly language program: SUB adds two numbers pushed by Driver and displays SUM ; Author: Daniel Strien ; Using Code from: RSzabo ; Date: 3/29/2012 .386 .MODEL FLAT ExitProcess

Assembly 为什么在使用PUSH或POP指令时不鼓励使用ESP寄存器?

我正在浏览C代码,其中我必须计算特定程序跟踪中使用的寄存器数量。每当遇到push或pop命令时,该代码忽略了存储ESP寄存器。我还参考了X86指令,其中写道“ESP,堆栈指针,不应使用”。为什么???它不应用作通用寄存器。请随意使用它作为堆栈指针,并适当小心。例如,您可以在带有“sub esp,…”指令的堆栈上为本地变量保留一些内存,但必须在ret指令之前恢复其原始值。ret指令不应用作通用寄存器。请随意使用它作为堆栈指针,并适当小心。例如,您可以在带有“sub esp,…”指令的堆栈上为本地变

Assembly 汇编程序的错误结果

有人能帮我找出以下程序的错误吗?我正在阅读“从头开始编程”,并试图将示例转换为x86-64汇编。下面的程序在一组数据中查找最大的数字。但当我组装、链接并运行它时,我得到0。这显然不是最大的数字。它可以使用32位寄存器/指令运行,但不能使用64位 # PURPOSE: This program finds the largest value in a set of data. # # # VARIABLES: %rax holds the current value. %rdi holds the

Assembly 如何将8位地址移动到x86程序集中的16位寄存器中?

这里,我试图将变量X(一个8位变量)移动到寄存器bx(一个16位寄存器)中。在这种情况下,如何将X的值移动到寄存器bx中 .686p .model flat,stdcall .stack 2048 .data X byte 5 ExitProcess proto, exitcode:dword .code start: invoke ExitProcess, 0 mov bx, X; 1>p4.asm(13): error A2022: instruction operands m

Assembly 澄清32位寄存器x86的子部分

关于x86汇编中32位寄存器的子部分,我有一个问题:寄存器的较低子部分(使用时)是否被视为相应32位寄存器的一部分 ror cl,2 ror cl,2 push ecx pop eax ror cl,2 ror cl,2 推ecx 波普eax 以上面的代码部分为例-由于CL是ECX寄存器的一个子部分,当我将寄存器的内容推到堆栈上时,CL子部分中的内容是否也被推到堆栈上?还是分开处理 假设我随后将堆栈弹出到EAX寄存器,那么CL寄存器中以前的内容是否会进入EAX寄存器 ECX寄存器的下部包

Assembly 这个节目好吗?

我是汇编语言的新手,试图通过代码学习汇编语言,我发现了一段代码,上面写着它将二进制转换成十进制,并以ascii码的形式输出到屏幕上。下面是代码 org 100h push ax push cx push dx push si mov dx,10 mov ax,dx ;Assuming number to print starts in DX mov si,10 ;decimal 10

Assembly 组件retn、jmp、进程寄存器 我最近开始用汇编语言编写C++程序。我想澄清几件事

从我读到的内容来看,指令指针从retn指令中获取下一步应该执行的地址。这是否与执行jmp相同,因为jmp也设置指令指针 如果我是对的,那么retn和jmp之间有什么区别?如果我错了,有人能用C伪代码解释吗 无限循环的程序集等价物是什么 我读到EAX、EBX、ECX、EDX都是可互换的,但它们有什么区别吗?如果是这样的话,在哪种情况下我应该特别使用EAX/EBX/ECX/EDX您似乎在谈论子程序调用,下面是关于它的详细信息 当您调用一个子例程时,它看起来是这样的(地址会有所不同,但我不想让您混淆可

Assembly 以下汇编命令有什么好处吗?

在我们的系统编程课程中,我们学习汇编语言。在我们教授在课堂上展示的大多数示例程序中;他正在使用: 异或CX,CX 而不是 MOV CX, 0 CMP AX, 0 JNE SOME_LABEL SUB AL, '0' 或 而不是 MOV CX, 0 CMP AX, 0 JNE SOME_LABEL SUB AL, '0' 或 而不是 MOV CX, 0 CMP AX, 0 JNE SOME_LABEL SUB AL, '0' 我的问题是,当使用和/或或异或代替替代(易于理解/阅

Assembly 如何以编程方式生成SMI中断

SMI中断可以接收到SMI#引脚(例如从芯片组)。但是,我如何以编程方式(例如,使用Int指令)signam SMI中断?SMI的保留中断向量中没有任何中断请参阅系统软件通过对主板逻辑认为特殊位置的I/O访问触发的-软件SMI(端口0B2h是常见的)。

Assembly 汇编MASM将乘法结果相加到和

我有一个小问题,想办法把乘法结果加到和上去。假设我们只能使用寄存器(没有内存变量),我不确定如何才能做到这一点。例如,如果要计算此表达式: ; 2013 * 365 + 765 mov ax, 365 mov bx, 2013 mul bx ; 2013 * 365 ; The result would be DX:AX where EAX = 00003619 EDX = 0000000B mov cx, 765 ; Now I am stuck here. I am not sure

Assembly 用DEC循环

我的MASM32程序有问题。我正在尝试使此代码正常工作: .DATA alfa dword 9 .CODE start: MOV ecx, alfa MOV eax, 0 L1: ADD eax, ecx DEC ecx LOOP L1 CALL WRITEINT exit END start 我发现问题只是在循环中,其他一切都很好。请帮我让循环正常工作,它不返回值也不退出。这应该发生吗?提前谢谢大家 循环已经处理了减量,所以要去掉DEC ECX,即更改: DEC ecx LOOP L

Assembly Debian本地组装MIPS

我想学习一些基本的MIPS汇编。我有一个运行Debian的MIPS虚拟机,所以我想使用它。我想使用mips汇编语言,而不是GNU可移植汇编语言 我需要安装哪个汇编程序?我应该发出什么命令来组装代码?是否有教程解释整个过程 如果有人已经问过这个问题,我很抱歉,但我无法找到我问题的答案。有很多好的mips模拟器,它们更容易学习。查找spim或MARS我为什么要使用模拟器?我想以与编译和运行程序相同的方式来编译和运行一个程序,如果它是用C编写的。Linux发行版不是通常安装了gcc和binutils吗

Assembly C64上的稳定光栅

使用Commodore64上的6510 assembly,我试图创建一个稳定的光栅效果。使用双IRQ原理,我在屏幕上绘制了一些光栅线。我用NOP进行pad,使每个正常扫描线匹配63个周期,每个不良扫描线匹配23个周期。我意识到我需要设定一个特定的开始线,以便将我的第八次迭代与一个坏线相匹配,但无论我把第一行放在哪一行,或者我使用的是哪种NOP组合,我都无法获得正确的时机。我想要完整的线,而不是“断”。有人能看出我做错了什么吗?代码采用Kick汇编程序格式。下面是一个屏幕截图: .pc = $08

Assembly 操作码恒定性规则

所以,每当我在汇编上运行一个命令并在CPU模式下查看它时,我都会得到segment:offset,然后我就会得到类似于该命令的操作码。 例如,我运行命令mov ax,1A1Bh,它向我显示: cs:0005 B81B1A mov ax, 1A1Bh cs:0095 8BC2 mov ax, dx 所以我的问题是,为什么操作码中的1A1Bh显示为1B1A 每当我运行mov ax,dx时,它都会显示: cs:0005 B81B1A mov ax, 1A1Bh cs:0095 8BC2 mov

Assembly 程序集数据类型限制和示例

我正在上汇编语言课,这本书给了我一个数据类型列表: 字节-8位无符号整数 SBYTE-8位有符号整数 字-16位无符号整数 SWORD-16位有符号整数 DWORD-32位无符号整数 SDWORD-32位有符号整数 FWORD-48位整数 QWORD-64位整数 TBYTE-80位(10字节)整数 REAL4-32位(4字节)短实数 REAL8-64位(8字节)长的real REAL10-80位(10字节)扩展实数 正如标题所说,我希望获得关于每种数据类型的上限/下限的信息,也许还有一些示例

Assembly 可执行段ARM程序集中未对齐的操作码

我的程序的目标是从命令行获取一个参数并将其存储到r0,将其从ASCII转换为整数,然后再转换回ASCII 我将它存储到一个缓冲区中,我需要遍历命令行的参数。除了每次程序循环获取下一个命令行参数时我的缓冲区没有初始化之外,一切都运行得很好 因此,我的解决方案是实现将缓冲区重置为所有0的过程resetbuffer。现在汇编程序给了我一个错误:在可执行段中未对齐的操作码 我试图在我的程序中插入.align 2和.align 4,但它仍然给我同样的错误。。。试图修改过程调用从循环开始到循环结束的位置仍然

Assembly 使用gdb的堆栈地址

我在gdb上使用命令“x/50gx$exp”获得了这个十六进制地址: 我试图找出41序列的起始地址,但我不知道如何计算它 有人能帮上忙吗?假设这是一台小小的endian机器,每个整数中字节的实际顺序是颠倒的,因此颠倒行中的每个整数值: 0xbfffca94: 0x006369676f6c656d 0x4141414100000000 给了我们: 0xbfffca94: 6d 65 6c 6f 67 69 63 00 00 00 00 00 41 41 41

Assembly 调用修复数组过程似乎导致了无限循环

我写这段代码是为了用视频ram画一个形状。每当我调用fixarray时,它似乎进入了一个无限循环。您能帮忙吗?我发布了一大块代码,因此任何人都可以重新生成它并找出问题的原因 Data_segment_name segment para hhead dw ? ;head h dw 12 dup (?) ;array hlength dw ?

Assembly 链接器问题GNU LD

我与GNU ld有一些问题。我生成对象文件,并希望将它们链接在一起以形成一个ELF文件 但是,我在链接时遇到一个奇怪的错误: seraphim@Axe:~/awork/local/MD/example$ make m68k-elf-as -D -R -mcpu=68000 -march=68000 --bitwise-or --traditional-format --register-prefix-optional --statistics -I /home/seraphim/awo

Assembly 如何在x86程序集中设置溢出标志?

我想写一个简单的代码(或算法)来设置/清除溢出标志。你能帮我吗?来设置使用(在MASM语法中) 并分别使用以下命令重置OF标志: pushfd ; mov EFLAGS to stack btr dword ptr [esp], 11 ; reset OF flag popfd ; write it back to status register 设置使用(在MASM语法中) 并分别使用以下命令重置OF标志: push

Assembly MCS-51上24位数字的乘法算法

我正在尝试用汇编语言为一个带有 它必须乘以24位数字 也许我问了一个愚蠢的问题,但我如何将24位的列相乘呢 下图说明了16位数字的乘法方法。24位数字的乘法方案看起来如何 通过快速浏览文档,MCS-51具有8x8->16倍频。您可以使用两个24位数字A和B,它们相当于: A = a0 + (a1 * 256) + (a2 * 65536) B = b0 + (b1 * 256) + (b2 * 65536) 其中a0是A的最低字节,a1是A的中间字节,a2是最高字节,bs是B的相应内容 因此

Assembly 程序集MIPS:存储字符串

我写了一些代码,从键盘上取下你的名字,然后马上打印出来 .data name: .word .text .globl main main: li $v0, 8 la $a0, name la $a1, 20 syscall move $s1, $v0 li $v0, 4 la $a0, name syscall li $v0, 10 syscall 但在我看来,有些事情似乎不

Assembly 仅识别和打印字符串中的元音

我有个问题。我必须在8086汇编中编写一个程序,用字符串填充数组,然后只打印出字符“a,a,e,e,I,I,o,o,u,u”。 我已成功打印出数组中的每个字符,但当我开始添加条件和跳转时,我的程序就进入了无限循环:( 以下是全部代码: org 100h jmp main ;messsages to be shown: msg1 db 'this is an example program.', 10, 13, 'made to show only the v

Assembly 如何使用MASM按对角线打印字母?

我正在尝试这段代码,但我不能完全按字母顺序按对角线打印。。你能帮我查一下这个密码吗? 此代码的所有问题都源于这样一个事实,即BIOS函数02h(SetCursor)和DOS函数02h(WriteCharacter)都使用DL寄存器作为参数。不幸的是,在这种情况下,你的意思是不同的。有几种解决办法。Ped7g建议使用自由寄存器BL保留一个单独的字符代码 我提出的一个简单的解决方案是根本不使用DOS输出功能,而是使用BIOS功能0Eh(电传字符)写入显示器。此函数不依赖于DL作为参数。而是使用AL

Assembly 三星硬盘固件汇编语言的名称?

通过串行TX/RX访问三星HDD HD322GJ 320GB SATA终端 经过一些研究,一个人建议DA命令意味着转储程序集。DA一次转储8个单词。转储似乎是编码的指令/数据 有人知道这个HDD系列中使用的汇编语言的名称吗 ENG>DA0 00000000: E59FF018 00000004: E59FF018 00000008: E59FF018 0000000C: E59FF018 00000010: E59FF018 00000014

Assembly 如何为ADC配置AVR板?

我有一个模拟到数字转换器的示例代码,但在我的Mikroelektronika ATMEGA32开发板上看不到预期的结果。我想到的唯一原因是跳线的位置。我插上了电位计附近的两个PB2和PB3。有人有什么建议吗 /* *Lab4_ADC.asm * * */ ;***** 常数 .eq预置=192;T/C0预设常数(256-64) ;***** A/D转换器全局寄存器 .def结果=r16;结果和中间数据 .def温度=r17;暂存器 .def temp2=r20 .def temp3=r2

Assembly 在x86_64程序集中实现StrCat

所以问题是:我实际上正在尝试用汇编语言重新编写一些clib函数(这是一个帮助开始汇编的学校项目)。我目前正在使用的功能是strcat。 目前,我的目标是保持简单,并遵循以下几条规则: 如果目标字符串为空,则返回(rax)源字符串 如果源字符串为空,则返回(rax)目标字符串 复制目标字符串末尾的源字符串(包括终止0)并返回结果(仍为rax) 这是我的密码: ft_strcat: push rbp mov rbp, rsp ; saving the stack s

Assembly 为什么x86程序集中的第一个参数从偏移量8开始?

我正在努力发展对汇编语言的理解。我知道当函数创建堆栈帧时,它会推送当前的EBP,然后将堆栈指针值复制到EBP。第一个(也是唯一一个)功能参数由EBP+8访问。但为什么是8?按下EBP后的下一个值逻辑上为偏移量4。我读了很多网页,但似乎我不明白这一部分。缺少的DWORD是回信地址。调用堆栈如下所示: ebp : saved ebp ebp + 4 : return address ebp + 8 : pushed parameter 然后,如果函数使用局部变量,因为堆栈空间(通常)是为堆

Assembly 两个汇编代码之间的差异

我需要帮助理解汇编语言中的代码,将变量声明为局部变量或全局变量 这段代码之间有什么区别 ;File: fig0647.pep ;Computer Systems, Fourth edition ;Figure 6.47 ; BR main data: .EQUATE 0 ;struct field #2d next: .EQUATE 2 ;struct field #2h ; ;******* main ()

Assembly 为什么在使用DIV指令之前EDX应该为0?

我注意到,当EDX包含一些随机的默认值,如00401000,然后我使用如下的DIV指令: mov eax,10 mov ebx,5 div ebx 它会导致整数溢出错误。但是,如果我将edx设置为0,并执行相同的操作,它就会工作。我相信使用div将导致商覆盖eax,其余部分覆盖edx 获取这个整数溢出错误确实让我感到困惑。DIV指令将EDX:EAX除以DIV指令后面的r/m32。因此,如果未能将EDX设置为零,则使用的值将变得非常大 信任有助于做什么 对于32位/32位=>32位除法:零或符号

Assembly 错误A2008:语法错误:

我正在尝试为我正在开发的操作系统编写一个引导加载程序 第一行出现语法错误 这是我的汇编代码: .286 ; CPU Type .model TINY ; memory of model ;---------------------- EXTERNS ----------------------------- extrn _BootMain:near ; prototype of C func ;--------------------------------

Assembly 什么';xmm寄存器的vbroadcastsd的等效值是多少?

似乎没有一个版本的vbroadcastsd使用带有xmm目标寄存器的64位内存源操作数,这有点奇怪,因为存在ymm和zmm版本 所以我想有一些现有的指令涵盖了这个目的。是64->128广播 有趣的是,AVX1 256位版本(vmovddup ymm,ymm/m256)有两个独立的车道内广播,并且有一个256位内存源。但有了内存源,它仍然像广播加载一样,完全在英特尔CPU的加载端口上运行 正如您所说,是AVX1,vbroadcastsd-ymm,xmm是AVX2,并且没有带有xmm目的地的vbro

Assembly GNU作为值不在分配的节中

我目前正试图在GNU汇编程序中构建一个两阶段引导加载程序。我使用as命令编译汇编文件,使用ld命令将它们链接到最终的二进制文件。事先提供一些信息: $ as --version GNU assembler (GNU Binutils for Debian) 2.28 [...] This assembler was configured for a target of `x86_64-linux-gnu' 和ld: $ ld --version GNU ld (GNU Binutils for

Assembly 如何生成两个随机数,一个在50和259之间,一个在50和159之间?

我正在为一门课做一个汇编8086项目,需要一种生成两个随机数的方法,一个在50和259之间,一个在50和159之间;我假设您不需要任何好的东西(例如,不需要用于安全/加密的东西,不关心偏见等) 考虑到这一点;我只是从BIOS中获取当前日期(“int0x1a,ah=0x04”)和自午夜以来的当前节拍(“int0x1a,ah=0x00”);并将它们合并(使用XOR)以获得伪随机数生成器的种子 一旦你有了一个种子,只需做一些数学杂技——例如,将“种子+1”乘以一个大素数,然后将其除以一个稍小的素数(得

Assembly nasm组件:Can';1004次通过后,找不到所有标签的有效值

我正在尝试为NASM汇编程序编写一个x86汇编代码,它将十六进制数转换成字符串并打印出来。为了简单起见,我假设我的十六进制数只包含数字(例如0x1234)。代码如下: 打印十六进制asm [组织0x7c00] mov-dx,0x1234 调用print_hex jmp$ 打印十六进制: 推bx 推送cx 推送dx 推斧 mov bx,六角头 mov-cx,0x000f mov-ax,0x0000;长度计数器 循环: 推bx;保存bx 和cx,dx,;0xabcd&0x000f 添加bx,5;在

Assembly 这些操作码是做什么的?

我正在学习RISC-V组装的西部数字教程。我对汇编编程比较陌生。所以我有几个澄清的问题,我似乎找不到一个真正的虚拟友好教程 这是有问题的代码 因此,我的问题是: 12人在干什么?我认为堆栈指针在前面的指令中已经移位了16位。我通常不明白为什么在内存中向下移动16位,然后再加上12位。 另外,这个语法在x86中的含义是否与[eax+12]相同 目标操作数始终位于左侧,这是否仅适用于x0寄存器 我注意到我们根本没有使用堆栈指针,我们真的需要这么做吗?另外,sw和lw之间有什么区别?它们都被使用过,我

Assembly 原因是什么;由信号11“终止的命令”;关于mov命令

我正在一个类的NASM项目中工作,当我试图将寄存器值移动到内存地址时,一直遇到一个问题。我有一个较长的文件,但下面的代码以相同的方式重新创建了情况和结果 section .text global _start _start: mov esi, x add esi, 2 mov [x], esi section .data x equ 2 运行此代码时(使用处的编译器),它返回“command terminated by signal 11”消息。问题似乎

Assembly 在程序集中显式输入十进制数

我发现自己常常无法立即识别数字是十进制还是十六进制(如果十六进制数字没有前缀或字母)。例如,在前面的问题中,输入一个类似于0000000000 400078的数字,但不确定它是哪一个 有没有办法在x86_64中显式指定带有前缀的十进制数?例如: mov %rsp, %rbp movb $0x16, -1(%rbp) movb $0d22 -2(%rbp) # <-- something like this movb $0b

Assembly 汇编代码指令;pushq";无法将64位的内容推入堆栈?

我正在学习Linux x64上的汇编代码。我写了这样的东西: pushq 0x1234567890123456 #It didn't work. pushq 0x12345678 #It worked. 我使用gcc-c来编译代码,第一行是error witherror:operation type与'push'不匹配。但pushq意味着将64位的数据推入堆栈,十六进制数正好是64位 那么,为什么会发生此错误?push没有在堆栈上推送64位立即数的表单。您可以在堆栈上推送一个

Assembly 在x86汇编中,方括号是什么意思?

我对组装非常陌生,有一些非常基本的问题 这四个命令之间有什么区别 mov ebx, eax mov [ebx], eax mov ebx, [eax] mov [ebx], [eax] 他们说括号的意思是“获取地址的值”。但是,那么,第一行到底有什么作用呢?它不会将eax的值移动到ebx中吗?如果是,那么括号的意义是什么?说明中缺少操作数分隔符,。我还不知道有哪个汇编程序没有它。我在引号中修正了这一点 在x86汇编中,一些寄存器可用作数据寄存器或地址寄存器(与其他体系结构不同)。这些寄存器称为

Assembly 装配中的伪指令和软件抽象

这更像是一个一般的理论问题 我正在学习一些汇编语言,并注意到一些软件,如MARS for MIPS, 实现架构的实际指令集中不存在的抽象,这些抽象似乎被称为伪指令,例如li,以及其他易于理解的抽象,如创建整洁的数组等 我的问题是: 如果我想成为一名专业的汇编程序员,我有什么理由避免这些复杂的抽象吗 专业汇编编程是否缺少这种类型的抽象 我有点怀疑它仅仅是出于教育目的而存在的,但没有找到任何关于这方面的信息。作为一名“专业汇编程序员”,您可能会疏忽使用晦涩的3操作数形式,可以将值从一个寄存器移到

Assembly 在英特尔x86(little endian)汇编中,如何为值5存储阵列的单个dword?

我现在是一名大学生,我的教授在录制讲座时放大了镜头,所以我看不到他在写什么。例如,我不确定如何存储“DWORD 5”,例如从位置2000开始: 我在想 2000:00000101 2001:00000000 2002:00000000 2003年:亿 但我不确定是否可以。 2000:00000000 2001:00000000 2002:00000000 2003:00000101 如果有人能解释一下哪一个是正确的,我将不胜感激。x86是little endian,而且 所以,第一个。x86是小

Assembly C64程序集存储内存地址并增加它

我现在学习C64的高级汇编程序,但我以前从未学习过任何asm或8位计算。我想打印大的ascii横幅数字。我想将$0400地址存储在内存中,当我增加行号时,我需要将其增加36,因为sceen是40个字符的宽度,所以我想跳到下一行,但我的问题是这是一个2字节的数字,所以我不能只添加到它。这个演示效果很好,除了线路增加,因为我不知道 所以我需要的是: 如何在内存中存储2字节的内存地址? 如何增加内存地址并存储回2字节? 如何将值存储到新地址2字节,而索引寄存器仅为1字节? 有很多人 BasicUpst

Assembly 如何在MASM或emu8086中生成重复值数组?

如何使大小为10的表格具有相同的值0ffh重复多次 tab2 db 0ffh*10不工作 注:使用emu8086时,答案是tab2 db 10 dup(0ffh) @Michael 4的thx是否有效取决于您的汇编器,您没有指定汇编器。在NASM中,它是tab2:times 10 db 0FFh我使用的是EMU8086您是否尝试过tab2 db 10 dup(0FFh)?Thx是的,它工作正常

上一页   1   2   3    4   5   6  ... 下一页 最后一页 共 482 页