我以前为SSE做过一些内联ASM编码,即使对不懂ASM的人来说也不难。但我注意到MS也提供了包含许多这样的特殊说明的本质
是否存在特定的性能差异,或者是否有任何其他强有力的理由说明其中一个应该高于另一个
从标题中重复,这是专门针对VC++2008公开的本质,用于非托管的、本地的C++。 < P>在VisualC++中没有内联程序集用于X64。在x64上也可以使用intrinsic。如果要将代码移植到x64,则必须使用内部函数。内部函数与其等效的汇编指令相同,如果可能,应使用它们-编译器知道如何直
标签: Assembly
x86-64cpu-architecturemasmmasm32
如果目标体系结构是I386或AMD64,如何在编译时从ASM源文件中检测
我正在使用masm(ml.exe)/masm64(ml64.exe)来组装file32.asm和file64.asm。最好创建一个文件file.asm,该文件应包含file32.asm或file64.asm,具体取决于体系结构。理想情况下,我希望能够写出以下内容:
IFDEF amd64
include file64.asm
ELSE
include file32.asm
ENDIF
IFDEF amd64
包括file6
这个指令是做什么的
mov (%r11,%r12,1), %edx
看。上面说
在AT&T语法中,内存是
以以下方式引用
segment-override:signed-offset(base,index,scale)
页面下方有一些示例。我觉得这是最好的:
GAS memory operand NASM memory operand
------------------ -------------------
(%ecx,%ebx,2) [ecx+ebx*2]
AT&T语法
我必须为我可以运行计算器的操作系统编写代码。它就像桌面计算器一样。为此,我正在阅读我已完成的引导加载程序处于实模式。在此之后,作者将解释保护模式。我不想使用保护模式。我没有时间做那件事。所以我想用bios中断在实模式下编写计算器。可能吗?我认为它可以写在引导加载程序的第二阶段(我不确定)。这意味着我不必使用内核(我不确定)。我不知道如何使用BIOS中断来处理键盘。谁能给我一个链接,这将有助于我在这方面?如果我上面假设的任何错误都是错误的,请纠正我。提前谢谢。您可以处理IRQ 1(通过x86控制器
我是个汇编高手。
我需要解下一个函数y=x^2(a+b+c);
a、 b,c-来自控制台的输入
结果x是写入文件所必需的。
我不要求为我解决这个问题,但可能有人与我共享有用的链接?尝试编写一些代码。您甚至可以用C编写一个函数,并查看生成的汇编程序代码(例如,如果在Linux上使用gcc,则使用gcc-S-fverbose asm)汇编的问题是没有真正的输入和输出函数。在标准编程语言中,您可以定义希望在屏幕上显示的内容。在你的例子X中,你定义了你想要用户输入的内容,在你的例子中,a,b,c。然后进
具体地说,在8086汇编中,如果SS=AC8D和SP=7A75,则在使用ret(指令代码CB)从far过程调用返回后,哪个SP将相等。没有给出其他信息。IP和CS从堆栈中弹出一个远返回,因此SP将增加2*2字节。取决于过程有多少参数。。。请试着回答问题。@m0skit0程序不起作用;I don’我什么时候没有任何论据?进入程序?退出程序?进入-退出协议完成了吗?@m0skit0,也是ss=AC8D,没有给出其他信息。然后检查Jens Björnhager的答案
问题在
是关于汇编中的strlen,但它似乎是用AT&T语法编写的,不幸的是,我的汇编程序不支持这种语法
我只是好奇你如何将[eax+ebx]的语法翻译成英特尔的语法
所以
相当于
[eax + 4]
假设偏移值存储在%ebx中。
它的等价性是什么
[eax + ebx]
?
谢谢,[eax+ebx]应该翻译成(%eax,%ebx)
AT&T语法中内存地址的完整语法为:
offset(%reg1,%reg2,scale)
这相当于:
[reg1 + reg2*scale + offset]
我正在试图找出如何使用scanf获取用户输入。我知道如何使用printf:我所要做的就是将要在屏幕上写入的数据按如下方式推入堆栈:
global _main
extern _printf
extern _scanf
section .data
msg db "Hi", 0
section .text
_main:
push ebp
mov ebp, esp
push msg
call _printf
mov esp, ebp
pop ebp
ret
但是我不
标签: Assembly
x86-64intelopcodemachine-code
在英特尔文档中,表2-4显示了REX前缀位的重要性
有人能给我解释一下当W=0时如何解释吗?上面说0=由CS.D决定的操作数大小,但我不明白CS.D的意思 CS.D表示与当前代码段关联的段描述符的“默认操作大小”字段。这控制地址和操作数的默认大小,可以设置为默认为16位或32位操作数大小
在64位又称长模式(CS.L=1)中,CS.D=32位的唯一有效设置是,因此清除W位的REX前缀将默认操作数大小保留为32位。(操作数大小前缀可以将操作数大小覆盖到16位)
长模式下的默认地址大小为64位(指令
众所周知,我们可以使用NASM中的方括号读取地址值,例如:
mov esi, [ebp +8]
mov edi, [var] --> (var is a variable)
方括号中的值代表偏移地址,但当我们使用该格式读取值时,我们绝对需要一个段,无论是在实模式还是保护模式下,那么NASM使用的默认段寄存器是什么?我知道Windows使用平面模式,但如果我为不同的段寄存器(cs、ss、ds、es、fs、gs)设置不同的值,NASM将使用哪个段寄存器?我猜是ds,对吧?使用方括号中
我将列出我不明白的部分,并向您展示我不明白的部分
首先
.Align指令
.对齐整数,填充。
.align指令使生成的下一个数据按整数字节对齐
1.~?:“意味着什么导致生成的下一个数据以整数字节对齐?”我可以推测生成的下一个数据是要进行寄存器传输的内存,不是吗?模意味着除法的剩余部分。我不理解“将以整数字节模对齐”
简单数据声明的剩余部分是什么?由剩余部分对齐生成的下一个数据如何有用?如果下一个数据是模对齐的,也就是说,下一个生成的数据,不管它的确切含义是什么,是整数的余数吗?这完全没有道理
我是汇编新手,制作一个程序可以读取汇编中的数字,我可以从键盘读取,但在屏幕上打印时遇到问题,下面是代码
section .data
x db "number is =%d",10,0
y db "number is =%d",10,0
section .text
global main
extern printf
extern scanf
extern read
lea ebx ,[c1]
push ebx
push x
call scanf
mov ecx,c1
push
查看一些反汇编和第一个指令mov eax,DWORD PTR[ebp+0x8],即0xf7fda858
我迈出了一步,但eax没有改变。我读错了吗?我是gdb的新手,所以这当然是可能的
9: x/16xw $esp
0xffffd350: 0xf7fbdff4 0x00000000 0x00000000 0xffffd368
0xffffd360: 0x0804870a 0xf7fbdff4 0x00000000 0xf7e324d3
0xffffd370: 0x00000001
我有一块S3C6410板。S3C6410具有ARM1176JZF-S内核。
我尝试使用IAR v6.4?为该IC编译一个演示项目?。
项目中存在包含以下代码的程序集文件:
IMPORT _main ; C entrypoint for Steppingstone loader.
AREA |C$$code|, CODE, READONLY
global Start
Start
b _main
DCB
我是汇编语言的新手,我需要帮助理解助记符是如何直接转换成字节的
例如,我有一句台词说
b 0x00002B78
它位于内存地址0x00002A4处。如何将其转换为EA00004B(上述程序集的字节表示)?我的印象是,“EA00”表示组件的“b”分支部分,但是“004B”呢?如果有人能大致了解这一点和资源,以找到转换等,将不胜感激。我试着用谷歌搜索这个,但我真的不确定到底该用谷歌搜索什么。我在谷歌上搜索的内容没有任何帮助。您要查找的所有信息都在。如果您查找b指令,您将看到它的编码及其工作方式。以
我一直在试图弄清楚溢出和携带(对于ARM7,但足够基本,我指的是适用于任何东西的术语)
我想我终于有了它——但我想检查一下我的“真正的基本理解”是否正确,所有的复杂性是否都消除了,它是否真的可以归结为:
unsigned => V = 0
V = 1 => bit n is incorrect
C = 1 => bit n+1 'exists'
谢谢,关于溢出,这些状态位与无符号vs Two补码有关
加法本身是符号独立的,这就是二补的美。一个逻辑块可用于无符号和有符号的
标签: Assembly
bit-shiftmultiplicationaddition
我需要使用加法和移位将两个32位有符号数字相乘,并将64位数字存储在内存位置$0408-$040F。这两个数字存储在8位存储器中
movb #$1F, $0400 ; the first number is $1F230001
movb #$23, $0401
movb #$00, $0402
movb #$01, $0403
movb #$F8, $0404 ; the second number is $F8012346
movb #$01, $0405
movb #$23,
我知道,当一个示例汇编程序正在运行时,CPU正在逐个执行指令,实际上,由于是分时操作系统(例如Windows 7或XP),CPU正在所有程序之间切换并执行代码(从这个程序执行一个代码,然后从内存中的另一个程序执行一个代码)
当尚未完成该进程时,CPU在何处保留上次执行指令的寄存器值:
program A:
(
mov al,23h
mov bl,32h
.........
.........
)
program B:
(
mov al,10h
mov bl,12h
)
我一直在学习MIPS作为汇编的入门,最近开始使用宏。我想能够做的是将另一个宏生成的值,或任何特定寄存器中的任何值,传递到另一个宏中。即
.data
.macro print_int(%x) #this macro prints a given integer %x
li $v0, 1
li $a0, %x
syscall
.end_macro
.macro terminate #this macro terminates a program
li $v0
我刚刚读了一些关于SPARC汇编的老课程,我不记得“add”和“addcc”指令之间的区别(比如sub和subcc)
你能给我解释一下这种区别吗
谢谢,cc后缀表示指令设置条件代码(Z、N、V标志)。因此,add执行添加而不设置条件代码,而addcc执行添加并设置条件代码
假设我有一个C++函数:
extern "C" void fillArray(unsigned char* byteArray, unsigned char value);
指向数组的指针将以RCX为单位,字符值将以DL为单位
如何使用DL向RAX中填充值,以便如果我要mov qword ptr[RCX],RAX并按数组打印,所有值都将等于“char value”
请注意,我并没有试图编写我的编译器代码,我只是在学习。您可以乘以0x0101010101010101将最低的字节复制到所有其他字节
我试图确定访问两个内存地址的时间,这两个地址之间有一个特定的增量。我的代码必须混合使用x86和C,并将“裸机”运行(没有任何操作系统;编辑:我实际上是在修改memtest),以获得最精确的结果
我比x86更习惯于ARM组装,因此我可能犯了一些错误(我想知道,为什么mov在x86中做了这么多不同的事情)。我的代码如下
inline unsigned timeread (ulong addr, ulong delta, int iter)
{
ulong daddr;
int i;
出于好奇,我一直在OSX上摆弄NASM,似乎遇到了一些问题。我试图将多个字符串及其长度存储在.data部分并打印出来
; nasm -O0 -f macho64 -o problem.o problem.asm
; ld -macosx_version_min 10.7.0 problem.o -o problem
; ./problem
section .data
KmsgHello: db `Hello, assembly!\n`
KmsgHelloLen:
我得到了CS、DS、SS、ES、SP、BP、SI、DI、AX、BX、CX、DX的寄存器值。如何查找代码段的十六进制字节大小?您不能
8086现在已经相当过时了,但有些龙还记得它。这是一个16位的处理器,但有20位的地址:4段寄存器(CS、DS、ES和SS)的值移位了4位,偏移量被添加到其中。总可寻址内存为1 MB
任何段的最大大小为65536字节(0x10000)。但处理器不知道代码段的实际大小。没有内存保护,它被允许在代码段的中间写入数据(可能是正确的或错误的),这取决于程序员知道为什么:-(
标签: Assembly
microcontrollerx86-16microprocessors
MTS-88.C和I/O板-08板上有8(八)个7段显示器和20个键盘。显示器编号为7-SEG.1至7-SEG.8,分别连接至端口B的PB7至PB0线路。要在7段显示器上显示字符,必须将字节写入端口B。MSB 4位是7段显示器的地址,LSB 4位是数据。因此,如果我们将58小时写入端口B,则第6个7段显示器将显示数据8
20个键盘从P01到P20编号,排列成5列4行。最右边的列连接到PB0,而最左边的列连接到PB4。最上面的行连接到PA0,而最下面的行连接到PA3。为了检测按键,首先必须通过向端
上下文:我正在重复进行逐位旋转,我发现标准旋转可以通过移位和bfi进行复制。注意:当我编译使用FXC的HLSL文件时,它为此使用了大量bfi指令
当我使用标准(shift、shift、xor)运行自己的着色器程序集的字节码,并使用shift/bfi rotate将其与自己的进行比较时,标准执行得更好
然而,在运行等效的FXC编译字节码时,我发现shift/bfi的性能与shift/shift/xor相当,甚至更好
是否有某种方法来构建shift/bfi,以最大限度地提高其性能?某种寄存器使用或指
我正在用NDISAM反汇编程序。我的问题是,在调用指令和跳转之后,内存引用意味着什么
它们是相对于指令的还是从程序开始计算的?它们指的是NDISAM输出文本第一列中的地址吗?它指的是输出第一列中给出的地址,通常也是指令相对于文件开头的位置。程序不知道代码将加载到内存中的什么位置,因此通常无法告诉您目标在内存中的实际位置
请注意,这仅适用于近直接跳转和调用指令(包括条件Jcc跳转指令)的目标地址,因为这些地址是相对于指令编码的。其他指令中的地址不使用相对编码,因此显示的地址不引用第一列中的地址。相
汇编中是否有可以从标签推断类型的通用ptr指令
例如,我们有一个类型的变量,它可以是byte、word或dword,我想把它移到一个寄存器中,如果我们不知道它的类型,有没有办法
.data
VAR1 dword 2
VAR2 byte 3
.code
mov eax, ? ptr VAR1
mov eax, ? ptr VAR2
不是真的,您可能已经能够使用movsx,但是如果VAR1或VAR2与寄存器EAX的大小相同(32位),它就会抱怨。@RossRidge最近的一个回答可能会建议使用MA
标签: Assembly
Arm
microcontrollerdirectivenxp-microcontroller
我正在上关于微控制器的实验课(我们使用的是FRDM-KL25Z128),我在指令.word和.eq方面遇到了问题
首先,教授给我们的示例代码旨在使FRDM板上的红色LED闪烁,如下所示:
在修改代码使三个LED同时闪烁并发出白光之前,我们需要回答一些问题,但这不是问题所在
在代码的底部,所有寄存器地址都是用.word指令定义的(因为我们使用的是32位字)。其中一个问题是回答我们是否可以将指令.word替换为.eq
我的第一个想法是,是的,我可以将.word替换为.eq,因为最后一个指令是为标签指
我刚刚在我的旧286计算机上安装了一个数学协处理器,我一直在汇编它的指令集
我拥有8086 CPU的《英特尔程序员参考》,其中有一个很长的章节介绍8087的编程。我从那一节学到了几乎所有我需要知道的东西,但它从来没有提到如何将一个值从8087的寄存器堆栈转移到内存变量中
除了弹出堆栈并在寄存器堆栈内交换数据外,似乎没有任何8087指令用于移动数据
那么,如何将st(0)转换为内存中的临时实数变量呢 您是否错过了FST的FST指令?对于拥有真正的286,您投了赞成票。对于8087的指令,您仍然可以
我有一个简单的mips32程序:
.text
.globl main
main:
lw $s3,10
move $a0,$s3
li $v0,1
syscall
li $v0,10
syscall #program termination
我所要做的就是加载并注册$s3编号10,然后打印它。Mars会毫无错误地组装它,但当我点击run时,我得到以下错误:
Runtime exception at 0x00400000: fetch address not aligned on wor
我使用IDA分析EXE,发现一些令人困惑的东西。.data部分应该包含初始化数据,因此每个位置都应该有如下内容:
var_A db 0h
var_B dw 12h
但是我有很多带问号的条目。e、 g
.data:00000001400F1680 qword_1400F1680 dq ? ; DATA XREF: sub_14004F8B0+8Er
.data:00000001400F1680
从第110页的添加说明:
如果i=0,则添加并添加cc计算“R[rs1]+R[rs2]”。如果i=1,则计算
“R[rs1]+符号(simm13)”。在任何一种情况下,总和都会写入R[rd]”
读取程序集时,如何知道I=0还是I=1?在反汇编代码中,助记符/操作码看起来没有任何变化。i”表示指令中的“立即”值。立即数是常数。你会看到这样的情况:
add %g1, 59, %g1
这意味着“将常数59添加到g1,并将结果放入g1”
当i=0时,表示该参数不是立即数。所以这是一个登记册!您将在组装
我使用内联汇编,我的代码如下:
__m128i inl = _mm256_castsi256_si128(in);
__m128i inh = _mm256_extractf128_si256(in, 1);
__m128i outl, outh;
__asm__(
"vmovq %2, %%rax \n\t"
"movzwl %%ax, %%ecx \n\t"
"shr $16, %
我想这样做:
i=0
.rept 3
add rcx,[a?(i*2+1)]
i=i+1
.endr
它应该输出以下内容:
add rcx,[a1]
add rcx,[a3]
add rcx,[a5]
我找不到解决这个问题的办法。我不希望它包含在宏定义中。我不相信不使用宏或其他类型的预处理就可以解决这个问题。执行此操作的GNU汇编程序方法可能类似于:
.altmacro
.macro addmac val
add rcx, [a\val]
.endm
.macro
我正在尝试运行tanenbaum计算机架构第6本书中的代码。我键入的代码与这本书完全相同。代码是:
.686
.MODEL FLAT
PUBLIC _towers
EXTERN _printf:NEAR
.CODE
_towers:
push ebp
mov ebp, esp
cmp [ebp + 8], 1
jne L1
mov eax, [ebp + 16]
push eax
mov eax, [ebp + 12]
我目前正在学习alp(x86)。我最近偶然发现了一个程序,该程序用于显示存储在数组中的字符,基本上是十六进制形式。为了显示字符,我们应该将其转换为ascii,然后再显示它们
;display procedure for 64bit
display:
mov rsi,char_answer+15
mov rcx,16
cnt: mov rdx,0
mov rbx,16h
div rbx
这是编程卡:
为什么LEA 0x89AB(%A0),%A0在68000汇编中是非法指令?根据给出的示例,我推断16位立即数是符号扩展的。因此,我猜索引寻址模式中的16位偏移量也是有符号的。因此,0x89ab是一个无效的偏移量,因为它不适合16位有符号数字。似乎您将x86误认为是m68k(摩托罗拉68000)。它们在很多细节上都不同。寄存器A0来自m68k,但不是x86。@Netch:m68k有一条LEA指令,其助记符与x86相同@彼得科德斯见问题编辑历史:它最初在所有文本中包含“86”。这就是
DB以1字节为单位进行分配
DW以2字节为单位进行分配
DD以4字节为单位进行分配
DQ以8字节为单位进行分配
因此,我假设:
RESB 1分配1个字节
RESW 1分配2个字节
RESD 1分配4个字节
RESQ 1分配8个字节
我说得对吗
报告没有说太多:
3.2.2 RESB和朋友:声明未初始化的数据
RESB、RESW、RESD、RESQ、REST、RESO、RESY和RESZ设计为:
用于模块的BSS部分:它们声明未初始化
存储空间。每个都接受一个操作数,即
字节、字、双字或任何要保
简介。对于我的编译器课程,我必须把一些语言翻译成汇编语言。现在我的代码有一个segfault,我很难调试它。拥有监视变量的能力将大大简化过程,但最终的asm代码只有寄存器及其派生
问题。如何手动为gdb创建调试符号?我相信我能传播所有必要的信息。将创建单独的文件还是将其作为asm的一部分?在前一种情况下,如何让gdb知道该文件
有一些手册的链接就足够了。我搜索了一个,只找到了“gcc-g”和一些关于单独生成符号文件的问题。它通常是asm的一部分,带有特殊指令以发出一部分调试信息。查看.c文件上的
我需要从用户那里获取字符串输入,但我不知道他将输入的字符串的大小,我需要在内存中准备一个数组作为字符串的大小,因为我使用的是中断21h,ah=0ah。
所以我的问题是,如果我不知道字符串的大小,如何获取字符串的输入?
我还能用别的中断吗?我搜索了,但什么也没找到。我建议您创建一个固定大小的缓冲区,并使用循环直接输入字符
通过这种方式,您可以检查用户输入的字节数,并在该数字超过缓冲区大小时终止
简言之:
创建具有足够大小的缓冲区
抓取一个字符直到
这是一次断线
输入的字符数将超过缓冲区
不要
我正在尝试执行ARM C代码中的ASM指令DCD 0xf7f0a000
以下是我尝试过的方法和错误:
__asm("DCD 0xf7f0a000");
错误:#3061:无法识别的指令操作码
错误:隐式物理寄存器R0应定义为变量
错误:隐式物理寄存器R1应定义为变量
更新:
ARM编译器版本:ARM编译器5.06更新6
PS:我正在尝试通过执行未定义的操作生成异常。ARMCC从供应商处获得了非常高质量的文档
您没有指定ARMCC的版本,很明显,自从我使用它(大约15年前)以来,情况发生了变化
目前在我看来,我们拥有“Push”这样的指令的唯一原因是用一条指令替换多个MOV和算术指令
是否有“推送”所做的事情不能通过更原始的指令来完成
“PUSH”只是编译成多条机器代码指令的单个助记符吗?PUSH是一条真正的机器指令(),而不仅仅是一条汇编宏/伪指令。例如,push-raxis的单字节编码为0x50
但是您可以使用其他指令来模拟它,如sub-rsp、8和mov存储。(这对于像x86这样的CISC机器是正常的!)例如,请参阅
为了精确地模拟它(不修改标志),可以使用LEA而不是ADD/S
编译以下nasm代码时出错:
global _ports_read
global _ports_write
extern _ports_port
extern _ports_data
section .text
bits 64
_ports_read:
inb [_ports_data], [_ports_port]
ret
_ports_write:
outb [_ports_data], [_ports_port]
ret
错误是:
.../ports
最近我开始学习汇编8086,主要是出于好奇
汇编中的输入只允许您键入一个字符,因此我尝试在汇编8086中制作一个程序,允许您输入多位数整数输入,以“空格”(“”)结束输入,然后添加数字并打印值
我看到可以使用push和pop将参数传递给过程,但我尝试使用它们使过程返回一些内容并将其存储到变量中,根据我对汇编8086的了解,我无法想象使用ret实现这一点的方法,所以…无论如何,我制作了一个过程,但是由于某些原因,过程末尾的ret似乎不起作用,并且过程运行了无限次
到目前为止的代码:
.model
目前,我试图用nasm编写自己的引导程序,但并没有真正成功
问题是,我想将.bin文件转换为.iso或其他图像文件,以便VM识别它
但是我的转换程序说文件坏了
My.bin文件是在Linux下使用NASM编译器编译的,大小正好为512字节
nasm boot.asm -f bin -o boot.bin
我希望任何人都能帮助我=
先谢谢你
请向.iso致以最良好的敬意,因为这是一个过度的.iso,引导加载程序的填充使.bin与软盘扇区大小相同,因此请使用软盘映像:
#Prepare an em
编写一个汇编语言程序进行搜索
向后通过内存位置F454h-F503h
用于包含ASCII值的内存位置
对于小写字母“a”,将总数放入
位置0500h。让程序在凌晨2点开始
记忆。汇编程序,将其加载到
模拟器,运行它,并验证它是否工作
没错
循环:
注:
当我在分级机上运行时,我没有得到正确的结果,因此非常感谢您的帮助。有两件事需要考虑
您希望起始地址为F503h,结束地址为
是F454h
理想情况下,您的循环退出条件应该测试索引为零或负(BNE或BPL)。这是为了避免使用比较(CPX)
如果测
标签: Assembly
dosx86-16memory-segmentation
我正在研究.EXE程序和.COM程序之间的区别。
EXE对我来说是合乎逻辑的,堆栈位于与程序代码相关的另一段中(事实上,堆栈是强制的,并用.stack指示此限制),因此,当我转到插入值时在堆栈中(在.EXE中),使用与程序不同的段,我不会混淆这两个
例如:
SP = 0400
SS = 3996 CS = 3995 IP = 0000
堆栈的容量为1024字节(400h),并引用堆栈段3996h,这与代码段3995h不同。所以我确信数据不会被混淆
但我不明白的是,当我不得不处理.COM程序
我已经看到了以下关于如何在汇编中普遍使用索引地址的定义(摘自Group Up的《编程》一书):
movl起始地址(,%INDEXREGISTER,WORDSIZE)
我在阵列上使用了类似的方法(我最近的问题)来执行以下操作:
movl my_array(,%rdi,4), %r10 # move the int at the start of my_array into %r10
第一个逗号前的第一个元素是什么,或者通常为空?“起始地址”总是一个变量名,还是经常是其他名称?是否使用过绝对内存地
标签: Assembly
bitcpu-registersunsignedsigned
所以我知道在汇编中,每个寄存器只包含一系列位。但是,这些位序列可以解释为有符号或无符号
有没有办法强制汇编程序将寄存器中的一系列位解释为无符号/有符号的?将全局无符号C变量加载到汇编寄存器后,所有寄存器最终都被解释为无符号量,但我需要将其解释为有符号量。您尚未指定CPU体系结构。但通常情况下,您会使用单独的说明。例如,在x86上,JB是“低于(未签名)时跳转”,而JL是“低于(签名)时跳转”。另一个好的副本:。我发现的大多数副本都是x86。我投了一个Z80一个;我见过一些MIPS,但在谷歌的第一
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 482 页