Assembly 如何在MIPS程序集中增加地址?

我刚刚开始精益MIPS组装,我正在尝试编写一个简单的while循环。它将等同于C代码: inta[5] for(i=0;i假设A[] lis $4 .word 4 lis $5 .word 1 add $7, $4, $5 ;$7 = 5 add $6, $0, $0 ;$6 = 0 loop: sw $6, 0($3) add $3, $4, $3 ;point to next "int" add $6, $5, $6 ;add 1 to our counter bne $7, $6, lo

Assembly 堆栈的汇编x86实现

我需要在x86程序集中实现一个堆栈,所以我写了以下内容: section .bss my_stack: resb 5 但是在我继续我的程序后,这个地址中的数据消失了 有一种更好的方法可以实现堆栈????我不确定您想要什么,但是由于x86汇编语言提供了自己的堆栈,为什么不使用它呢 push reg ; push register reg to the stack pop reg ; pop register reg from the stack ; actu

Assembly MASM32,显示字符串和整数

我使用的是MASM32(版本10),我想知道在屏幕上输出字符串和整数的最简单方法是什么。请提供完整的源代码,而不仅仅是具体的行 多谢各位 编辑: 它崩溃时没有输出任何东西。我尝试了其他几种方法,但有不同的问题,唯一常见的是我没有在屏幕上显示字符串:)您似乎在使用DOS中断(int 21h),但也使用了.model flat,这表明您没有构建DOS程序(DOS不支持flat模型) 如果您打算构建适合在Windows上运行的32位控制台模式程序,则不能使用DOS中断。这里有一篇文章介绍了一个使用Wi

Assembly 模拟386

我正在申请一个竞赛,挑战人们为一台古典电脑编写程序。我将使用PC/MS-DOS条目进行申请。这些规则允许使用高达386的CPU 我一直在调查,我发现市场上最强大的386是运行在40MHz的Intel 386DX。无论如何,我不知道它的竞争对手(AMD、Cyrix、Texas Instruments…)是否发布了一款386兼容的CPU,其总体性能更好(我对包括芯片FPU在内的那些CPU特别感兴趣) 你们知道更好的386变体吗?此外,我需要知道如何在DOSBox上以最精确的方式模拟它 谢谢 最快的台

Assembly 在跳跃之前,用EOR更换CMP组件

我使用的是ARM处理器,但我假设所有处理器的问题都是一样的 我想使用EOR指令(按位异或)而不是CMP,因为我必须在跳转后找到不匹配的位 但是,我不知道为什么会这样 CMP r0, r1 BNE .somewhere 不等于 这是正常的还是我必须再次寻找我的问题 Thank's将r0减去r1(r0-r1),然后为BNE设置一个标志,说明两者是否相等(结果为0)或不相等(结果为非0) 为了在二进制中进行减法,可以使用,取r1,求反,加1,然后再加上r0。如果加法的结果都是0,它将标记为相等。否则

Assembly 引导加载程序如何读取DVD(cd)?

我有一个用汇编编写的第一阶段引导加载程序。我需要它从dvd(或cd)加载第二阶段引导加载程序。我只找到了从floopy或hdd读取的示例。在那里使用的中断时间为13小时。在中断描述中,它说它可以读取软盘和硬盘。我试着用13h来读一张CD,就好像它是一张软盘,但它不起作用 问题:软盘和dvd之间有什么区别(从访问它们的意义上来说),我可以使用CHS(cilinder,head,sector),扇区大小是多少,我可以使用13h指令正确读取dvd吗。也许有一些例子。我查看了LILO的源代码,发现那里只

Assembly 使用内联汇编高效地引用C数组

使用windowsxp,gcc 我有一个C++项目,里面有一些内嵌汇编代码。 程序集代码需要引用C数组。 因为我使用的是内联汇编。我必须将指向数组的指针传递到其中一个寄存器中。不幸的是,这抢走了我的寄存器,我需要一些复杂的计算 我想知道是否有一种内联汇编方法可以在不丢失寄存器或将指针推送到堆栈的情况下引用C数组。我不能使用堆栈的原因是因为我依赖堆栈来存储其他值,因为我没有足够的寄存器。您通常使用esi或edi寄存器来存储这样的信息,所以这些寄存器根本不涉及计算。(假设您正在使用x86)在汇编代码

Assembly FSTENV?几乎找不到有关此指令的任何信息

我在一个程序中得到了这个指令: FSTENV (28-BYTE) PTR SS:[ESP-1C] 它有什么作用 它使用和更新哪些寄存器 谢谢大家! 它存储浮点环境。其中包括:当前控制字、状态字、标记字、指令指针和操作数指针。这些存储在内存中的一个结构中。在16位模式下,该结构为14字节。在32位模式下,它是28字节。我完全不确定它在64位模式下是否可用(64位模式主要使用SSE)[Edit:显然在32位和64位模式下操作相同。] 我认为它不会改变协处理器的任何当前状态[Edit:oops--确

Assembly 带括号的汇编程序简单计算

我想解一个方程。我用的是MASM32。我认为我使用的代码是正确的。但我得到了“更大”的值,即使我使用必要的值来解方程。我错过了什么或做错了什么 .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib

Assembly 如何调用这个子程序?

我正在学习NIOS II IDE中的MIPS 32位汇编,我有一个完整的工作子例程,它将存储在r4和r5中的两个数字相乘,并在r2中返回结果: .global muladd # makes label "main" globally known .text # Instructions follow .align 2 # Align instructions to

Assembly 将PIC汇编指令转换为机器代码

我看到有一些特定的格式可以将MIPS汇编指令转换为机器代码。应该有类似的程序手动将PIC组件转换为机器代码。有人能给我提供与此相关的文档吗?类似的东西 但无法抗拒:为什么要手动执行此操作?您可能正在寻找MIPS32®M4K®核心指令集。如果是这样的话,您可以在上找到所有关于的信息。微芯片数据表都有指令集参考,包括指令的编码方式。请注意,大多数系列完全不同(即16系列和18系列完全不同),因此请确保获得正确的数据表 以下是16F627A的一个示例,摘自本手册第118页: 本si不是MIPS指令集手

Assembly Atmel Studio:行尾垃圾错误

我正在尝试使用来自的ATMEL CAN库编译一个在AT90CAN128上运行的程序 但是,当我尝试编译时,在Atmel Studio 6中会出现以下错误 # | Description | File | Row | Col 1 | missing ')' | -\Temp\ccMKhrlO.s | 89 | 1 2 | garbage at end of line | -\Temp

Assembly x86 div指令错误

我正在windows 7上工作,但我也尝试了dosbox上的代码 我想知道如何在16位模式下将双字逐字分割 我使用fasm。并制作.com文件 以下代码正确运行 但当dx大于0时,它只是关闭仿真窗口 org 100h mov dx, 0 mov ax, 10 mov bx, 10 div bx add ax, '0' int 29h mov ax, 00h int 16h mov ax, 4c00h int 21h 如果我像下面这样更改代码。。 当dx高于0xf时,它将关闭 我不知道为什

Assembly 推堆栈时的分段错误(NASM)

我正在尝试运行nasm程序。 以下代码: segment .data contAir: dt 1.11330e-10 constOil: dt 2.33656e-10 segment .text global calc calc: mov edx, 0 push ebp ;mov ebp, esp ;mov eax, [ebp + 8] ret 在堆栈上推ebp时,我得到一个分段错误(核心转储)。为什么呢? 我正在Ubuntu虚拟机上运行这段代码。 有趣的是,有时我会出

Assembly “调用远TSS描述符:偏移量”后出现异常`

我有一个大问题,我被困了一个月! 我正在编写汇编代码,通过在bochs中调用far[es:esi+TCB.addr\u tss]来执行任务切换,如图1所示 现在我进入新任务,所以我在bochs中键入“s”,如图2所示: 现在,一切似乎都正常,通用寄存器CS、SS、控制寄存器CR0、CR3、LDT也正常。但是你知道如果我再走一步会发生什么吗?见下图: 怎么了?! 我不知道。我检查了DPL、段限制,似乎没有什么问题。 哦,上帝保佑我…这是一个很大的讽刺,我忘了设置PDE的访问权限 你能上传整个可

Assembly 如何在MIPS中遍历数组?

这只是我第二次处理MIPS组件(即,或任何类型的组件),因此请保持温和。所以我从头开始为MIPS做了一个乘法函数。这比我想象的要容易——我测试了它,它对一个值非常有效。不幸的是,当数组出现在图片中时,我完全不知所措 我甚至不知道如何开始。我觉得自己很迟钝,因为我不能问一个具体的问题,因为我不理解这个大主意。我分配了空间,为数组设置了常量值,但不知道如何: A.)将常量值(例如5,2,3,10,7)加载到阵列中 把我的外环打开 下面是我的代码,我需要的是一种让我的外循环运行的方法。有什么想法吗 /

Assembly 哪个汇编代码运行得更快

[A] : [乙] 你能告诉我跑快点吗 基本上[A]使用寄存器而[B]不使用 或者[B]的代码实际上也使用寄存器?我真的搞不懂 顺便说一句,实验结果表明[B]比[A]跑得快。听起来你已经回答了你的问题。如果你不需要重复使用这个值,[B]几乎肯定会更快。但您应该始终进行基准测试,因为CPU是复杂的。@Mystical我发现我会在不同的硬件上得到不同的结果…这不会改变任何事情。你在不同的硬件上运行,得到了不同的结果。所以你的问题的答案是,“这取决于硬件”。@Jianchen什么硬件A比B快? mov

Assembly jnz检查哪个寄存器

下面是一个汇编代码的玩具示例,演示了jnz的使用。我的问题是:在下面的代码中,jnz检查什么来决定它是否为0?我运行了代码,在我看来它检查了cx寄存器。从这一点上我不确定。例如,如果我有一个cmp和cx,那么jnz检查什么cx或cmp结果 mov cx, 5 mov ax, 0 mov bx, 200 add ax, bx inc bx dec cx jnz 0109 int 3 它检查状态(标志)寄存器中的零标志。 要查看哪些说明修改此标志,请参阅 上面说的是十二月: 受影响的旗帜 CF标志

Assembly 程序员能否设置用于执行指令的时钟周期数?

我正在使用飞思卡尔的HCS12 mirco控制器,有人提出了一个问题。时间延迟有什么影响?我说的是晶体频率和使用的编译器类型。我知道我可以通过访问控制时钟源XTAL和EXTAL的两个引脚的功能来设置不同的频率 我的主要问题是,正如标题所说,“我可以设置用于执行给定指令的时钟周期数吗?”。我只是不明白这个问题以及它在问什么。如何设置一条指令的时钟周期,或指定一条指令的时钟周期。类似于汇编中的指令具有执行所需的预定义时钟周期数。例如,无操作“NOP”指令浪费一个时钟周期。因此,我知道如何改变它的唯一

Assembly 什么是数据缓存和指令缓存?

发件人: 指令和数据具有不同的访问模式,访问 不同的记忆区域。因此,两者都有相同的缓存 说明和数据可能并不总是有效 因此,通常有两个缓存:一个指令缓存 仅存储指令和仅存储数据的数据缓存 知道指令和数据之间的区别是很直观的,但现在我不确定在这个上下文中的区别是什么?什么构成数据并放入数据缓存,什么构成指令并放入指令缓存 我知道手臂装配。任何需要STR、LDR、LDMF或STMFD的东西都会使用数据缓存吗?但从技术上讲,STR、LDR、LDMF和STMFD都是指令,所以我感到困惑。“数据”必须始终与

Assembly 反汇编程序如何从内存中提取操作码?

我想弄清楚反汇编程序是如何工作的。具体来说,内存中的内容如何映射到相应的汇编语言操作码 下面是内存中的内容,第一列地址: 773eed5c 50 ff 15 0c 17 3a 77 90-90 90 90 90 8b ff 55 8b P....:w.......U. 773eed6c ec 51 51 83 7d 10 00 74-38 ff 75 10 8d 45 f8 50 .QQ.}..t8.u..E.P 773eed7c e8 14 d7 ff ff 85 c0 74-24

Assembly 尝试分配变量时出现MIPS程序集分析错误

我的MIPS汇编代码有问题。 它在li$t4、$0行(实际代码的第四行)中显示了一个语法错误。 你能帮我解决吗 .data .globl funcall1 .globl funcall2 .text funcall1: lw $t1, 0($a0) # load the 1st argument - shows how many there are addiu $t2, $t1, -1 #t2 stores how m

Assembly 跳过空格-REPZ SCASB

我试图在汇编程序中解析命令行参数,我想跳过前导空格。根据我所知道的和在网络上确认的(例如),简单地REPE SCASB或REPZ SCASB就可以做到这一点。但事实并非如此。它不是在第一个非空格字符处停止,而是在下一个字符处停止(使用Turbo调试器进行调试证明了这一点)。此模式始终重复出现-如果有一个或五十个空格,则没有区别,ES:DI始终指向第一个非空格字符后面的字节。为了使用CX中的计数器进行验证,我需要此表达式正常工作 我在Ubuntu12.04的DosBox下使用MASM(ML.EXE

Assembly AVR程序集未执行我希望它执行的操作

我有一个Arduino Uno Rev3,我从C中的主代码调用以下汇编函数 # # Global data (val1) # .extern delay .data .comm val1,1 .global val1 # # Program code (compute function) # .text .global compute compute: lds r22, val1 ;value of input ldi r23, 0x00 ;0 value

Assembly 可以使用HDD仿真来允许我在CD上使用自己的可引导文件系统吗?

我正在玩操作系统开发,我想使用我自己的自定义文件系统。问题是,为了将我的操作系统安装到硬盘上,我将在CD上创建一个安装程序,理想情况下,我希望使用相同的文件系统创建该程序;这将意味着我不必担心如何导航CDF,并且我将能够使用与我的操作系统相同的引导加载程序系统来开发安装程序(这将是一个单一的平面二进制文件,其中前512字节包含代码,用于将文件的其余部分加载到内存中并执行其中包含的代码)。所以问题是,这可以通过HDD仿真来实现吗?如果可以,我该如何将平面文件系统映像刻录到CD上以实现这一点 提前感

Assembly 如何将值从输入AL移动到寻址寄存器,如16位的BX

我陷入了这段代码中…我想从用户那里获取一个输入,并将其移动到寄存器中…但寄存器是16位的,输入存储在8位的Al中。。。有没有办法将值从AL移到BX这样的寄存器…我这样做是因为我想在数组中使用BX,比如数组[BX]。。。。请帮我解决这个问题 .MODEL SMALL .STACK 100H .DATA MSG DB 10,13,"TIC TAC TOE $" MSG1 DB " $" ARR1 DB '1','2','3','4','5','6','7','8','9' MSG2 DB 10,

Assembly 建筑物的大小

从技术上讲,结构的大小是需要结构变量的字节数 例如,如果我使用下一个标准结构: ; building the sockaddr_in struct push 0 ; INADDR_ANY push WORD 0x672b ; port 11111 push WORD 2 ; AF_INET 我正在阅读的两个教程是:sizeof(struct sockaddr)=16(socklen\u t) 但我只看到1个dword和2个字=8字节。 8字节,第16位。我做了什么坏事?本教程不使用宏,而是输

Assembly 如何使用超过64kb的数据在16位保护模式下编程?

我想为16位保护模式编写一些代码,特别是一个带有一些程序的简单操作系统。我知道这听起来很傻,而且可能是,但我对理解如何在这些约束条件下编写程序感兴趣 我想知道在16位保护模式下工作的各种操作系统(例如OS/2和Win 3.1)中采用了哪些约定。他们用了什么ABI?远指针是如何传递的?不同的代码模型是否有多个ABI 为了澄清这一点,我知道什么是远指针,以及它们是如何在API级别上使用的。我想知道的是这在汇编级别上是如何工作的。远端指针的段是否在堆栈上传递?有什么特殊约定吗?大多数16位保护模式AP

Assembly 汇编以64位返回两个32位数字的总和

A+B都是32位。 该函数将返回64位的值 我必须做什么?假设堆栈上有输入,并按照正常惯例生成edx:eax: xor edx, edx ; high dword mov eax, [esp + 4] ; 1st arg add eax, [esp + 8] ; add 2nd arg adc edx, 0 ; handle carry ret 我该怎么办?指定体系结构并显示您得到了什么。一般来说,将操作数扩展到64位并相加。这是我的问题。如何将操作数扩展到64位?

Assembly 当ah=40h无实际输出时,使用int 21h

我试图使用int 21h ah是40h,但我似乎无法让它工作,当我在程序关闭后打开文件时,它只是不在其中写入,并且没有输出。。。。知道为什么会这样吗?在代码完全正常运行之前,我在代码错误所在的行上设置了一个旁注 ;multi-segment executable file template. .model small assume cs: code, ds: data data segment player db 0 startText1 db "Hello and welcome to '

Assembly MIPS赢得';t打印出缓冲区内容

我试图从输入文件中读取文本,将其存储在缓冲区中,然后打印出来。我非常确定我的代码是正确的,mars.jar文件与.s和.txt文件位于同一目录中。谁能帮我弄清楚为什么它不能打印文本 代码如下: .data buffer: .space 1024 inputFile: .asciiz "aufgabe1.txt" .text main: #open file li $v0, 13 #syscall for open file

Assembly 反汇编代码并查找'la'的长度`

鉴于以下MIPS组件及其拆卸。la指令有多长?为什么将la指令转换为lui(加载上限立即数)?为什么加载负数 MIPS组件: la $t1,addr1 lw $t1,($t1) 拆卸: la $t1,addr1 lw $t1,($t1) 0x9D00024C: LUI T1, -24576 0x9D000254: LW T1, 0(T1) 长度是否通过减去0x9D000254-0x9D00024C确定?我不知道为什么la会被翻译成lui,为什么它是否定的。因为大概addr1的地址是0xA0

Assembly 有人可以帮忙,为什么这不读取文件?

您使用archivo的方式表明您正在从键盘输入一个单字符文件名。如果您以正确的方式设置archivo缓冲区,则可以: archivo db 0;,0;? 这里你需要注意你使用的数字系统!您要求的大小(在CX中)为79h(一个十六进制数),远大于leido的81字节缓冲区。 你可能想写: mov bx, handle mov cx, 79h mov dx, offset leido mov ah, 3fh int 21h 程序的其余部分应该不会带来任何问题,除非我不喜欢你设置堆栈的方式

Assembly 是否在非缓存内存上锁定CMPXCHG?

一个简单的问题:是否可以在非缓存内存(即页面表中标记为非缓存的页面)上锁定CMPXCHG 此答案的内容与的内容非常相似,特别是“锁定”部分,我参考了该部分以了解启用快速路径互连(QPI)的系统上的锁定。 因此,这篇文章被标记为“社区维基” 是的,有可能 8086没有缓存,但能够缓存。 这是由于在系统中引入了#锁定信号而实现的。当这个信号被断言时,任何代理都不能启动新的事务,只有锁定的事务可以被执行(实际上),因此系统 随着缓存的引入,对总线锁的需求减少了。处理器可以通过在锁定期间延迟来自其他代理

Assembly 汇编调用堆栈.术语问题

我对Assembly是一个全新的人,希望在下面的陈述中确认我的误解,需要纠正 堆栈指针(ESP)指堆栈的顶部(最低内存地址) 基本指针(EBP)用于在构建堆栈帧时临时存储各种内存地址。它通常保存当前堆栈帧的最高内存地址 指令指针(EIP)指内存文本(代码)段中代码行的内存地址 一旦某些内容被推到堆栈中,就无法在适当的位置对其进行更改。也就是说,如果我们将EBP推到堆栈中,那么我们推的是EBP的当前值,而不是指向它的某种引用或指针。我们无法在适当的位置更改该值 传递到函数中的参数通常会移动到地址空

Assembly BIOS INT 10,AH=0E第二阶段的奇数行为

我已经开发了大约一年的内核,只是使用GRUB作为引导加载程序。然而,现在我想为我的内核开发一个引导加载程序 尽管我做出了努力,但我似乎无法解决装载机第二阶段的奇怪问题 生成文件: BOOTLOADER_FOLDER := boot KERNEL_FOLDER := kernel BOOTLOADER_SOURCES := $(shell find $(BOOTLOADER_FOLDER) -type f -iname "*.asm") BOOTLOAD

Assembly 用汇编语言程序链接问题

我有一个汇编语言程序的链接问题 .386 .model flat, c .stack 100h printf PROTO arg1:Ptr Byte .data msg1 byte "Hello World!",0Ah,0 .code main proc INVOKE printf, ADDR msg1 ret main endp end 此程序由 ml -c -Zi "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj"

Assembly 程序集比较incloud文件中的变量

我正在Tictatcoe游戏中构建一个组装Ai。我用的是eu8086乳化器。 我的想法很简单,我预先准备了一张桌子 table db 0 0 0 db 0 0 0 db 0 0 0 并在玩家每次玩游戏时更改值。 现在,我创建了很多这样的表,每个表都有不同的状态。 并将它们与curnnet的进行比较,然后告诉计算机该怎么做。 所以我做了一个incloud文件,放了很多变量。问题是,当我比较它们时,计算机没有意识到它们是相同的,但是如果它在同一个文件中,他就被识别了 比较说

Assembly 在C+中创建一个*int+;-MSVC&x27的意义是什么;在将函数返回值分配给全局函数之前,是否额外存储/重新加载函数返回值?

我是汇编代码的初学者。在C++开发时,我注意到一些MSVC生成的汇编代码,我不理解。有关守则是: 00DA1965 push 4 // The number of bytes we want 00DA1967 call operator new (0DA1339h) // Call to 'new' to allocate memory 00DA196C add esp,4 // Add the 4 bytes to the stack poin

Assembly 我的项目赢了';对大于130的数组进行t排序

所以我的程序应该接受用户输入(10到200之间的整数),然后打印出一个随机数数组,然后打印出该数组的排序版本。然而,这只在我输入130或更少时有效 我不知道我还能做什么。它起作用了,但只起了一半作用。有没有办法优化这段代码?我已经放置了一些行来帮助显示我遇到的问题 ****我运行了调试器,并在程序抛出异常错误的地方留下了注释***** TITLE Program5 (Program5.asm) INCLUDE Irvine32.inc ; (insert constant defini

Assembly VPERMIL2PS和VPERMIL2PD所有PERMIL2指令消失-替换缺失的指令

如何使用AVX2中的等效指令替换丢失的VPERMIL2PS指令 VPERMIL2PS ymm1, ymm2, ymm3, ymm4/m256, imz2 使用来自ymm4/mem的控件排列ymm2和ymm3中的单精度浮点值,结果存储在带有选择性零匹配控件的ymm1中 VPERMIL2PS (VEX.256 encoded version) DEST[31:0] sel_and_condzerosp(SRC1[127:0], SRC2[127:0], SRC3[3:0]) DEST[63:32

Assembly NASM rep nop作为暂停进行组装

考虑以下用x86汇编编写的函数 foo: rep nop ret 使用NASM组装代码,并使用gdb将其分解,我们有: (gdb) disas foo Dump of assembler code for function foo: 0x0000000000000610 <+0>: pause ;pause ???? 0x0000000000000612 <+2>: ret 0x

Assembly 为什么编译器会在MIPS之后加上一条指令;j";从函数返回的指令?

我正在查看MIPS平台的一些编译器输出,努力理解函数如何返回以及什么是允许的 下面是一个简单的例子: int two_x_squared(int x) { return 2*x*x; } 如果我看到 好的,这里没什么大不了的,我猜j$31跳转到返回地址,nop可能是防止管道中投机执行所必需的 但是我用XC32在-O2下编译,得到 two_x_squared: mul $4,$4,$4 j $31 sll $2,$4,1 所以。。。跳转后执行j$31后的行

Assembly MIPS计数数为1';s给定用户输入(B指令不在MARS中跳转)

我用MIPS写了一个代码,我想它会接受用户的输入(十进制数),然后用1加1,然后将位位置向左移动1,直到数字达到0,然后用二进制表示法显示十进制数中的1。我不确定哪里出了错 # Count number of 1s in a 32 Bit Number #$t0 = user input #$t1 = counter .data prompt: .asciiz "Enter Number: " result: .asciiz "Number of 1s counted: " n: .word

Assembly 如何将负整数转换为字符串并在MASM汇编中输出

我应该从用户那里获取带符号的整数,计算输入的数字之和,然后显示平均值。问题是,负数似乎没有正确显示,尽管我知道总和和平均数的计算是正确的 我需要在我的程序中添加什么来解释负数,以便正确显示负数 . . . writeVal PROC USES eax LOCAL resultString[11]:BYTE lea eax, resultString push eax push [ebp + 8] call intToStr

Assembly 如何在ARM中打印浮点(VFP)数字?

我需要在屏幕上打印一个浮点(VFP)数字来分配任务。我已经得到了prints和fgets函数来处理标准输入和输出,但这只适用于整数或字符串。我的教授要求我使用ARMSim来调试这个课程,所以我只限于使用ARMv5(不要问为什么,因为我不知道)。我对arm语言了解不多,请记住这一点 以下是我的代码,其中包含一个简单的main: .global prints, fprints, fgets @ PROGRAM .text .global main main: ldr r0, =euler

Assembly 为什么用零填充扇区的其余部分不适用于MASM?

我发现了一个NASM命令,用于用零填充其余引导扇区 times 510-($-$$) db 0 ; Pad remainder of boot sector with zeros 它在NASM中运行良好,但当我在MASM中使用此代码时,它会显示错误: syntax error : integer 如何为MASM编译器实现相同的代码。 谢谢您可以在引导加载程序代码的开头添加一个标签,如start:,然后进行填充,您可以执行byte 510-($-start)dup(0),然后执行dw 0a

Assembly 从二进制到灰色的转换在汇编中起作用,但反之亦然

我正试图建立一个程序,为Picobaze将转换从格雷码到二进制,反之亦然。以下是我迄今为止所做的: address 0 start: ;Infinite loop... ;Converting from binary to gray... constant binary_input,0 constant gray_output,0 input s0,binary_input load s1,s0 sr0 s1 xor s1,s0 output s1,gray_output ;Seems to w

Assembly 如何在不使用div运算符的情况下在MIPS中执行%

我需要使用MIPS执行C语言I-=j%64,但我不能使用DIV。如果不使用DIV,我如何在MIPS中找到余数。I变量存储在$t0中,j存储在$t1中。说到数学,不考虑计算机系统,如果我们想要一些模100的数字,我们只需要取其最后两个十进制数字 我们可以在二进制中做同样的事情,用2的幂来代替我们从小就有的10的幂 让我们观察一下,64实际上是2/6的幂 因此,模64是输入的最低6位二进制数字 尝试ANDI指令仅将最低的6位移到另一个寄存器。int den=0;而j>64{++den;j-=64;}

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