Assembly 为什么这些应该对无符号整数进行操作的指令仍然会影响处理有符号数时使用的标志?

有文件证明INC、DEC和MUL指令应该用于无符号整数,但前两条指令仍然会影响溢出和符号标志,MUL会影响溢出标志,这是处理有符号数字时使用的标志,这在该文档中没有意义,那么为什么呢?假设我们在这里讨论的是x86,上面说它是由所有算术运算设置的。您所指的哪些文档表明了其他情况?假设我们在这里讨论的是x86,则表示它是由所有算术运算设置的。你指的是哪一个文档表明了相反的观点?我不知道你从哪里得到inc和dec应该被限制为无符号整数的想法。请给我指一下相关的文件 一般来说,8086处理器对于有符号/

Assembly “bx”和“bp”之间的区别?

装配中的bx和bp之间有什么区别?示例如下: mov bx, 1h mov bp, 1h 它们引用相同的内存吗?与ss和sp相同吗?在x86中,寄存器bx和bp完全不相关。它们唯一的共同点是单词base bx(基本索引)是一个通用寄存器(如ax、cx和dx),通常用作数据指针(用于数组等) bp(基本指针)通常用于指向堆栈中的某个位置(例如,保存当前堆栈帧的地址) 同样,ss和sp也不同 ss(堆栈段)是段寄存器(如cs、ds和es)。它保存堆栈使用的数据 sp(堆栈指针)指向堆栈顶部

Assembly 关于大会的一些一般信息

我意外地在这里结束了:,这是迄今为止我读过的资料最丰富的一本书。我知道汇编是一种低级语言,可以由处理器直接执行,但我也知道每个处理器都有自己的汇编 问题: 这是真的吗 我能在我的上网本和电脑上运行一些基本的程序集吗 比如说,AVR(使用RISC体系结构)和使用CISC(它们使用的指令集)的x86处理器之间的唯一区别是什么 您如何运行汇编代码以及将其存储在什么类型的文件中 是的,在一定程度上。虽然来自同一系列的两个处理器可能具有不同的汇编语言,但实际上一种语言可能是另一种语言的扩展。有时,来自

Assembly MIPS与矩阵

我正在处理一个涉及MIPS和矩阵的学校项目。基本上,我必须编写一个程序,通过输入给定一个N参数(这应该是我的平方NxN矩阵的大小)和其中的所有元素(同样,通过用户输入插入)来计算这两个矩阵的点积,并将结果放入第三个矩阵 我首先想到了这段代码,它做点积,但在两个静态矩阵之后。不是通过输入。 两件事。为了让用户插入两个矩阵(以及N大小的矩阵),我应该如何更改它?而且,大多数情况下,我的矩阵初始化是否正确? 我没有做这样的文章“[(I*num_columns+j)*4],我想知道我得到的是纯粹的运气,

Assembly 将XMM寄存器推送到堆栈

有没有办法将压缩双字整数从XMM寄存器推送到堆栈中?然后在需要时将其弹出? 理想情况下,我正在为通用寄存器寻找PUSH或POP之类的东西,我已经查看了英特尔手册,但我要么错过了命令,要么没有命令… 或者我必须将值解压到通用寄存器,然后将其推送吗?不,x86下没有这样的asm指令,但您可以执行以下操作: //Push xmm0 sub esp, 16 movdqu dqword [esp], xmm0 //Pop xmm0 movdqu xmm0, dqword [esp] add

Assembly 如何在汇编代码(MIPS)中取消对指针的引用?

我看到了,我想知道如何将指针解引用到int? 代码如下: int load(int *ptr) { return *ptr; } 现在,我知道$a0包含指针。这是一个整数的地址,我们需要返回它 在MIPS中,您取消引用寄存器$a0中包含的指针,如下所示: LW $v0, 0($a0) JR $ra 提议的跳跃的目的是什么?现在我想起来,它完全错了。@JensBjörnhager@Chris实际上我对MIPS一无所知,但这似乎是对的。所以现在$v0包含ptr指向的整数的二进制等价物,

Assembly 什么是;第16段“公共用途”;在TASM中声明一个段时是什么意思?

我知道这里的代码应该创建一个包含16位代码和数据的段 segment code16 para public use16 assume cs:code16, ds:code16 但我不确定这里的格式是什么 我认为segment意味着我们正在声明一个segment,code16是名称,但我不确定parapublic use16 并且可能是假设cs:code16,ds:code16意味着我们将对代码和数据使用它。para 这是最新的para是“段落”的缩写,在本上下文中表示16个字节。因此,您将在1

Assembly 我无法将cpu从实模式切换到保护模式

我是根据尼克·布伦德尔的一本书来做这件事的。我编写了一个MBR程序,首先在实模式下运行,程序中的一些指令将cpu切换到保护模式。 首先,我将GDT设置为: gdt_start: gdt_null: dd 0x0 dd 0x0 gdt_code: dw 0xffff dw 0x0 db 10011010b db 11001111b db 0x0 gdt_data: dw 0xffff dw 0x0 db 0x0

Assembly 与ARMv7指令等效的x86_64指令

我正在尝试将一些ASM指令移植到C和ASM中的源代码中。 有人能帮我找到指令集并理解ARMv7指令的用法吗? 实际上我在处理中断,所以我想“翻译”: 我从未使用过ARMv7 ASM编程 谢谢 相应的英特尔INTS产品分别是iret和int。也就是说,中断处理是高度特定于CPU和平台的;一对一地翻译命令很可能不会产生一个工作程序。如果您正在开发一个应用程序,那么就不应该干扰中断(即使是int80h,也有更好的方法来执行系统调用)。如果您正在开发驱动程序或操作系统内核,您应该系统地学习汇编,而不是逐

Assembly 如何使用Ah 02h、INT 16h中断检查三个控制键?

我想写一个程序,最后按三个键:大写锁定、nom锁定和左移位。我可以用AH=02h,INT 16h来检查它们是否压在一起吗? 我还可以使用哪些其他中断? 好奇:) 这是我的代码,但我不想分享这个中断是如何工作的: TITLE 'PressKeys' ;key program ;----------------------------------------------------------------------------------- ;DATA SEGMENT DASEG SEGMEN

Assembly 如何在EMU8086中模拟基址+偏移量寻址和有符号整数支持?

首先,我对EMU8086的工作原理一无所知。而且我的汇编语言能力非常差。我必须展示EMU8086中对偏移量+基址寻址和有符号整数的支持。我已经试了好几天了,但似乎没有任何进展。有人能帮我吗?带注释的代码就可以了。请帮帮我,我现在很绝望 emu8086网站上的教程介绍了如何进行基偏移寻址: - 它们将基址0xb800加载到DS数据段寄存器中,将一些值加载到CX寄存器的低位和高位部分,将偏移地址0x015 E加载到BX寄存器中,然后将来自CX的值写入基址:偏移地址[DS:BX] 你试过什么?你取得了

Assembly 如何在NASM汇编程序中将寄存器bh中的值添加到ecx?

假设我在bh中有一个数字,如何将其添加到ecx?我不能只是 add ecx, bh 因为它会导致错误: invalid combination of opcode and operands 因为ecx是一个32位寄存器,bh是一个8位寄存器。您不能添加不同大小的值(CPU不支持它)。相反,请尝试以下方法: movzx ebx,bl ;Zero-extend BL add ecx,ebx 注意:对于有符号的数字,您也可以使用movsx进行符号扩展。您不能添加不同

Assembly NASM-打印UNIX时间

我正在尝试将UNIX时间打印到std输出。为什么这个代码不起作用 mov eax,13 ;sys call time; result is in ebx? int 80h mov ecx,ebx ;copy sys-time from ebx to ecx add ecx,30h ;int to char mov eax,4 ;std output mov ebx,1 mov edx,10 int 80h mov eax,

Assembly cpu寄存器的交换性

[ebp+eax]=[eax+ebp] 我在课堂上被问到这个问题,教授让我们搜索答案,但我在网上找不到任何资源。试试谷歌搜索默认段寄存器 [ebp+eax]使用ss段寄存器,而[eax+ebp]使用ds 然而,如果你还不知道答案,我想不出一个好的搜索词来使用。试试谷歌搜索默认段寄存器 [ebp+eax]使用ss段寄存器,而[eax+ebp]使用ds 然而,如果你还不知道答案,我想不出一个好的搜索词来使用。试试谷歌搜索默认段寄存器 [ebp+eax]使用ss段寄存器,而[eax+ebp]使用ds

Assembly 在AVR上启用外部中断

试图通过以下线路启用ATmega328P上的外部中断: LDI R16, (1 << ISC00) | (1 << ISC01) LDI R17, (1 << INT0) STS EICRA, R16 STS EIMSK, R17 SEI LDI R16,(1还应检查以下几点: 请重新阅读数据表“8.5 I/O内存”部分。EIMSK位于OUT支持的地址范围内。如果通过数据存储/加载指令引用,则必须在其地址中添加一些常量(0x20) 引脚是否设置为输入

Assembly 带数组的程序集

我正在学习汇编,我正在尝试制作一个脚本,它在其中添加数组中的元素,然后将其存储在数组中的最后一个元素中,但是我遇到了这个错误 第12行:0x00400028处的运行时异常:地址超出范围0x10400000 谁能告诉我我有什么不正确的地方吗 .text .globl main main: la $t0, i la $s0, sum la $t3, array la $t5, k addi $t0,$zero,0 addi $s1

Assembly “为什么使用”是非法的;la";在MIPS中使用寄存器间接操作数?

因为我“非法”使用load address将目标寄存器设置为s寄存器内容,所以我的家庭作业被重新评分为8/10分。以下所示为相关操作: la $t1, ($t0) $t0包含一个十六进制单词,我们要将其转换为十进制,但这并不重要。MARS(我们用于汇编语言类的MIPS模拟器)在您键入la时建议: la$t1,($t2)加载地址:将$t1设置为$t2的内容 她刚刚告诉全班同学(他们都做了同样的事情)这是违法的,然后我向她展示了MARS是如何建议这一指令的。该程序运行良好,包括在此处: 那么

Assembly 我想缩短或改进我的汇编程序

我创建了一个汇编程序,它可以打印从1到1000的整数,而不打印5的倍数。它工作得很好,但我想以某种方式缩短我的代码,或者以任何可能的方式使它变得更好。我是汇编新手,这是我第一次使用ARMsim创建程序 .equ SWI_PrStr, 0x69 .equ SWI_PrInt, 0x6b .equ StDout, 1 .equ SWI_EXIT, 0x11 .global _start start: MOV R5, #1 MOV R6, #1 MOV R7, #1000 LOOPHERE:

Assembly 调用.rodata段中的地址做什么?

我这里有一些汇编代码(32位,Linux,NASM),我假设其中有一个对地址的调用,地址是.rodata段的一部分。我找不到关于这到底是做什么的信息,或者我只是把代码解释错了 60000f7: mov edx, 0x2 60000fc: mov eax, 0x2 ;[...] EAX and EDX are not changed 6000140: lea eax, [edx+eax*8] 6000143: call DWORD PTR [ea

Assembly 反汇编代码中两个零值的比较-不必要?

已反汇编x86-64可执行文件后,反汇编程序将显示部分可执行文件的以下说明 xor r14d, r14d ; zero r14d xor ecx, ecx ; zero ecx mov qword [ss:rbp+var_40], rcx ; move rcx (now zeroed) into var_40 ; … additional code that doesn't make any ch

Assembly 将C代码转换为汇编(摩托罗拉68k)

我正在尝试将这些变量转换为汇编代码: char s[] = “TA”; short int x; int e = 99; 我是用int e做的: CLR.B D1 e = 99; // which compiles 我不知道如何进行数组或短int? 我知道对于阵列,我可以执行以下操作: 数组:DC.W“Value here” 但这对字符数组有效吗?请查看68000汇编程序。它甚至为用户提供练习。我完全根据给定的链接编译了整个答案 BUFFER: DC.B 'TA' 处理您的字符串(

Assembly 汇编x86中的Sqrt

我在网上找到了一些建议 我有一个类似的问题,但没有一个建议有用(或者我没有正确地找出如何根据我的计划实施它们) 代码作为asm(…)插入到C程序中 使用-masm=intel编译后,使用: asm ("FLD EBX \n" "FSQRT \n" "FST EBX \n"). 我得到编译错误: “错误:“fld”的操作数类型不匹配” “…与“fst”不匹配” EBX在这些命令之前保存一些整数值 那么,获得ebx=sqrt(ebx)的正确方法是什么呢?在现代代码中,对于sqrt,应该使

Assembly 在32位体系结构的nasm程序集中逐字节分析字符串

我是大会新手,如果问题很明显,那么很抱歉。我正在尝试解决一个汇编程序,我需要逐个字符解析一个字符串,并对该字符执行一些操作,然后将其存储在另一个字符串中。因此,我的问题是如何在nasm assembly中逐个字符解析字符串。执行以下操作: mov si, <adress of the string in memory> mov cx, <whatever value tells you how long the string is> cld

Assembly 在DOS中同时检测/接收多个按键? 我在TASM写曲棍球的时候,我遇到了一个问题,就是我一次得到两个键/点击,因为我需要同时点击一次,同时移动两个球员,我试了很多,但我认为我没有办法。 我听说我需要从缓冲区目录中读取,看看有哪些键,然后分别读取每个键,但我真的不知道如何执行此操作。

您介意使用扫描代码吗 我知道这不是您一直在寻找的简单的、临时的解决方案,但恐怕没有。 所以我写这篇文章是希望,如果不是你,其他一些有问题的程序员能找到一些有用的东西 我也知道您是为TASM编写的,但我忘记了这一点,从NASM开始,转换应该非常容易(只需添加段声明,从括号中取出段寄存器并添加PTR) 从硬件角度看,键盘似乎只重复上次按下的键,因此如果两个玩家按下两个键,键盘实际上只发送一个键。 然而,软件在任何地方同时处理多个键,它们是如何做到的 诀窍在于,当按下一个键时,键盘会发送两个代码:一

Assembly 使用fasm在部件中绘制三角形

我试图用fasm在汇编中画一个三角形,但我就是画不出来。 我有下面的代码来画一个矩形,我想我应该在循环“ciclopinta”中减少[comp]值,但这根本不起作用(或者我做得不对) 为什么要使用VESA功能设置传统视频模式?通常情况下,这是行不通的。最好使用以下工具: mov ax, 0013h ;320x200 256-colors int 10h 在程序接近尾声时,您使用BIOS功能07h向上滚动WindowUp,但您没有设置使其工作的所有参数。最好删除这些行mov-ah,07hin

Assembly 为什么读取EOF使scanf返回4294967295?

在我的汇编程序中,我想测试标准输入是否达到其EOF segment .data .fmt_read db "%80s", 0 ; 79 bytes of actual string + terminating 0 segment .text lea rdi, [.fmt_read] lea rsi, [buf_str] ; buffer to fill in xor eax, eax ; no floating-point param

Assembly 在emu8086中用减法除两个数

这个问题是这样的:“正如可以通过反复加法进行乘法一样,也可以通过反复减法进行除法。编写一个程序,用一个过程来计算一个数N1到另一个数N2的次数。你需要一个循环,并计算该循环执行的次数。”。我真的被困在减法阶段。我知道我必须创建一个循环,但我不知道放在哪里 org 100h .MODEL SMALL .STACK 100H .DATA MSG1 DB 'FIRST > $' MSG2 DB 'SECOND > $' MSG3 DB 'THE SUBTRACTION OF ' VAL

Assembly 正在意外更改程序集值

所以我只在汇编中编写了几个星期,在使用.if语句时第一次遇到这个问题 我的程序应该是一个简单的16位计算器,加、减、除、乘,只有一些异常处理硬编码。这将是除以0和溢出/下溢 问题是,由于某些原因,我正在更改变量值,甚至0也被更改并被不适当地插入 例如: .if pick == 1 INVOKE printf, ADDR oStrFmt, ADDR msg8 INVOKE scanf, ADDR ioDecFmt, ADDR num mov ax, current add ax, num mov

Assembly 理解冒泡与暂停与重复解码/提取

我对冒泡、暂停和重复解码/获取之间的区别感到困惑。我的文本是Patterson文本,第三版。 例1: add $3, $4, $6 sub $5, $3, $2 lw $7, 100($5) add $8, $7, $2 解决方案:(使用图像,因为很难键入内容) 在此示例/解决方案中,在第3条和第4条指令之间的新行中插入五个气泡 例2: lw $4, 100($2) sub $6, $4, $3 add $2, $3, $5 解决方案: 在本例中,气泡将第2条和第3条指令包装在时钟周期4中。

Assembly .quad指令在汇编中如何工作?

我无法理解.quad函数在汇编中的工作方式 根据我在网上读到的内容,它为当前节中的每个表达式生成一个64位的twos补码值。我了解什么是twos补码,以及section引用调用.quad的行这一事实 通常在汇编中调用.quad的位置和时间? 另外,为什么要使用.quad生成任何内容?使用.quad指令定义64位数值。与.byte指令的工作方式类似 .quad 0x123456789ABCDEF0, 2, 3 将编译为24字节: F0 DE BC 9A 78 56 34 12 02 00 00

Assembly 装配程序,如果a>;b、 将b的值平方

我试图用汇编语言创建一个程序,如果a>B,则将B的值加倍/平方 我可以输入一位数,比如5和3,答案应该是9,因为它是在第一个数字大于第二个数字的情况下,第二个数字的二倍/平方 不幸的是,答案是错误的,它产生了“P2”作为答案 pc macro x mov ah, 02 mov dl, x int 21h endm fl macro int 20h cseg ends end start endm cls macro mov ax, 0003h int 10h endm cseg segme

Assembly 为程序集输出着色

我正在尝试打印前景为白色、背景为蓝色的字符串: [BITS 16] ;16 bit code [ORG 0x7C00] ;Origin location SECTION .DATA ;Data section output: db 'Hello World', 10, 0 ;Output string (10 =

Assembly 苹果IIe显示器中的6502机器代码

我们有一个苹果IIe没有可用的磁盘驱动器。经过一点搜索,我发现显示器可以用来编程机器代码,并找到了一个例子,虽然没有解释它是如何工作的300:20 58 FC A9 C8 20 ED FD A9 E9 20 ED FD 20 8E FD 60这是什么意思?即使找到了所有的操作码,我仍然无法真正理解它们。让我们看看,谷歌肯定会帮助我们 20 58 FC A9 C8 20 ED FD A9 E9 20 ED FD 20 8E FD 60 具有操作码, (1) 知道其中一些地址,(2)知道更多 (“

Assembly 如果旋转1111 2次(右),它仍然是1111吗?

我知道,当你旋转钻头时,“脱落”的钻头只会回到另一端。我的课本给了我另一个答案,没有解释。我想要么是1,我一开始就错了,要么就是我不懂旋转位。 如果您能回答我的问题,我将不胜感激。有两种旋转方式(取决于您使用的CPU),一种是“通过进位”,另一种是仅旋转操作器(寄存器/内存) 样本: RLC(Z80) cb7b6。。。B1 B0 ____ ____ ____ ____ ____ | | | | | | | |

Assembly 对数组进行快速排序

我正在尝试将一段“C”代码转换为MIPS汇编语言,以便于学习。我编写了MIPS代码,但在某些地方我做错了,没有得到所需的输出。当我运行这个程序时,它显示了完全不同的数字。请纠正我哪里做错了 C代码: void交换(int数组[],int a,int b){ int t=数组[a]; 数组[a]=数组[b]; 数组[b]=t; } 整数分区(整数arr[],整数低,整数高){ int pivot=arr[high];//pivot int i=(低-1);//较小元素的索引 对于(int j=l

Assembly 访问运行Windows的嵌入式计算机上的IO端口

我在进入Nuvoton NCT6793D的扩展功能模式时遇到问题。数据表要求将87h写入regsiter2Eh两次,但在尝试这样做时,Visual Studio引发了一个异常,即第三行是“特权指令” 在线查找时,我的理解是,此指令只能在内核模式下执行,但我找不到任何方法在内核模式下运行汇编代码 .386 .stack 4096 . . . main PROC mov DX,2EH mov AL,87H out DX,AL <

Assembly 在x86程序集中执行xchg命令时,如何解决此编译器错误?

我正在编写一个信号量,需要运行以下命令: xchg rax, [rdi] 然而,编译器告诉我,这一行产生错误“地址大小的不可能组合” 我对自己说,这是有道理的,因为右手边的东西是一个字节,而rax是一个dword 所以我写了以下内容,应该可以解决这个问题: xchg rax, qword [rdi] 但它抛出了同样的错误 rax不是64字节寄存器吗?为什么它会抛出这个错误?你确定那是包含错误的那一行吗?两个版本都是正确的,nasm毫无问题地接受它们。百分之一百万肯定。如果你愿意的话,我可以粘

Assembly 使用x86程序集计算x*log_2(y)

因此,我正在尝试让处理器计算x*log_2(y)下面是我当前的汇编代码(nasm语法)。我在XMM0寄存器中有y的输入值,X是10的常数 MOVSD QWORD [RSP], XMM0 ;Copy result of prev calculation to the stack FLD QWORD [RSP] ;Load the float from XMM0 to the fpu stack ;Load number 10 to the fpu stack MO

Assembly 部件-仅显示大写字母

所以我想做的是当文本输入,asdHsExaLzLO并按enter键时,输出应该是HELLO。但我目前的代码没有输出。我做错了什么?我正在尝试将大写字母存储到输出中,但它似乎没有按我喜欢的方式工作 .MODEL SMALL .STACK 100H .DATA MSG1 DB 'Enter txt: $' OUTPUT DB '' ;storing uppercase letters NEWLINE DB 10, 13, '$' .CODE MAIN PROC

Assembly 如何在MIPS中将字符串文本文件放入数组?

我设法从txt文件中读取字符串文件并将其打印出来。我如何将它们放入数组?我知道如何将整数放入数组,但放入字符串会让我感到困惑。如果有人能帮助我,我将非常高兴。 例如,输入文件是: Corona CS512 stay home safe 我可以打印这些,但我很难将它们放入数组 .text .globl main main: li $v0,13 # open_file syscall code = 13 la $a0,fileNam

Assembly 程序在汇编8086中的程序之后无法继续

嗨,朋友们,我不能在“上位”程序后返回到下一行,我不知道ip去了哪里 .MODEL SMALL .STACK 64 .DATA input db 30,?,30 dup('$'),'$' msg1 db "Please enter string to convert:", 0DH , '$' msg2 db "Your converted input :", 0DH , '$' TransFormsMan db 32 ; Going to use the dec value 32 to cha

Assembly MIPS:多个BEQ语句如何工作?

我不熟悉MIPS汇编语言,在过去的几天里遇到了一些问题,虽然我自己也解决了其中的大部分问题,但这一点尤其让我感到困惑 我正在编写一个简单的计算器,我的脚本中有2个brancheqALUS语句,据我所知,beq语句是这样写的: beq$t0,$t1,加法函数 这大致可以转化为: 如果$t0等于$t1,则跳转到脚本中的additionFunction 这是我的密码: .data #Data section Prompt1: .asciiz "For addition enter 1

Assembly 我如何称呼';看跌期权';准时

我正在学习如何生成x64代码以及如何编写JIT 我做的第一件事是一个简单的return4函数。一切顺利。现在我想调用put。这要困难得多,因为我不知道如何获取内存地址。但这是我到目前为止所做的,我想知道如何正确地称呼它 我创建了一个名为sample的函数,它执行我的程序集应该执行的操作。我使用clang-csource.cpp编译源代码,然后使用llvmobjdump-dsource.o查看程序集。我从sample/Z6samplePKc中找到并复制了程序集,并将其放入数组中。然而,我看到它没有

Assembly 设置GDT时,Qemu将无限重新启动 我正在用C++编写一个操作系统,但是对于引导加载程序,我使用的是FASM。当我尝试设置GDT时,Qemu会清除屏幕并在顶部重新打印“SeaBIOS”。在我关闭它之前,它一直是这样循环的。下面是它的gif:

我试着用-nographic运行它,但它在Windows控制台中也做同样的事情 哦,是的,操作系统/版本信息。 Windows:20H2 FASM:1.73.25 Qemu:5.1.0 这是我的密码: gdt\u启动: dd0x00 dd0x00 gdt_代码: dw 0xffff dw 0x0 数据库0x0 db 10011010b 数据库11001111b 数据库0x0 gdt_数据: dw 0xffff dw 0x0 数据库0x0 分贝10010B 数据库11001111b 数据库0x0

Assembly [gas][cortex-m23]为什么这个beq.w会导致硬故障?

在编写一些代码来测试CM-23 ARM汇编指令集时,我遇到了关于以下条件跳转的奇怪(对我来说)行为 00001240:0x01f0ef80 beq.w 0x2422 包含函数具有以下指令: .拱臂V8-m.底座 .语法统一 .代码16 .thumb_func 从中可以看出,B{cond}的使用限制如下[−256字节到+254字节]。 本例中的有效跳转约为0x200,但.w后缀应将该范围至少扩展到16位域 在构建过程中,汇编器不会给出任何错误/警告,整个过程已经完成。然后发生硬错误(指向罪魁祸

Assembly 反转堆栈元素MIPS逻辑错误

我是MIPS新手,我正在编写一个堆栈程序,可以反转数组中的元素。。我尽了一切努力想看看是否有什么不对劲。。如果有谁能指引我 .data array: .word 4, 1, 2, 3, 2, 23, 33, 3, 1, 9 .word 21, 23, 25, 27, 29, 31, 3, 5, 7, 5 .word 41, 43, 45, 47, 49, 51, 53, 55, 57, 59 length: .word 30 .text .globl main .ent main main:

Assembly 如何在汇编语言/emu8086中声明计数器?

我是汇编语言新手。我只需要一些关于如何声明减少输入数的计数器循环的建议或提示。例如,输入=5,打印=55555.555.55.5 include emu8086.inc org 100h print 'Input a number: ' MOV AH,01H ;input INT 21H MOV BL,AL MOV DL,BL SUB BL,30H MOV CL,BL printn print 'Output: ' DISP: MOV AH,02H INT 21H DEC CL J

Assembly 处理来自次要PIC的x86 IRQ:EOI订单重要吗?

我最近在我的一个应用程序中添加了一个部件,该部件允许它使用属于次要PIC的IRQ进行操作。特别是,中断处理程序需要向两个PIC发出中断结束条件的信号,而不仅仅是主PIC: 现在,在添加这一部分时,我考虑了是先将EOI信号发送给次要PIC,还是发送给主要PIC。无论是哪种方式,搜索都不会产生任何声明。然而,我发现一些例子似乎选择了我最终实现的顺序;首先是第二个PIC,然后是主PIC 我的问题是,这有关系吗?是否有实际理由选择这两种顺序 二次PIC优先的例子 中断处理程序:

Assembly 查找最高设置位(整数log2)的英特尔x86_64汇编指令 编辑

在这个问题中,我不是问“我如何在C/C++中实现它。我已经这样做了。我是问是否有特定的asm指令来查找word/dword/qword等中的最高/最低位集。” 所有相关问题都没有以任何方式解决这一问题 回到问题上来 是否有“英特尔x86_64”指令返回字节/字/双字/四字中最高阶设置位的位置 我编写了一个“pseudo-log2”函数,它对无符号整数进行运算。该函数的一部分是一个递归循环,用于查找最高集合位的索引/位置 我想也许有一个汇编级的指令,我可以利用它来在ASM中写一个短函数,并把它链接

上一页 1 2 ...  4   5   6   7    8   9   10  ... 下一页 最后一页 共 493 页