Mips:asciiz vs ascii,打印许多变量

2024-04-11

我知道 (asciiz) 字符串以 '\0' 结尾,而 (ascii) 则不是。 但我还是很困惑。在这段代码中,为什么会打印:

‘一二三三四五五’

而不是简单地按照与打印命令相同的顺序打印它们?

.data
str1: .asciiz"One"    
str2: .ascii " Two"
str3: .asciiz" Three"  
str4: .ascii " Four" 
str5: .ascii" Five" 
.text

main:
la $a0,str1
li $v0,4
syscall

#---------------------------
la $a0,str2
li $v0,4
syscall
#---------------------------
la $a0,str3
li $v0,4
syscall
#---------------------------
la $a0,str4
li $v0,4
syscall
#---------------------------
la $a0,str5
li $v0,4
syscall
#---------------------------
#End
li $v0, 10
syscall
.end main

NULL 终止符 ('\0') 是必要的print_string系统调用来知道字符串在哪里结束。系统调用将继续打印字符,直到到达 NUL 终止符。

印刷str1 prints One.

印刷str2 prints Two Three, since str2不是 NUL 终止的。

印刷str3 prints Three.

印刷str4 prints Four Five, since str4不是 NUL 终止的。

印刷str5 prints Five.

把所有这些放在一起,你就得到了One Two Three Three Four Five Five.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mips:asciiz vs ascii,打印许多变量 的相关文章

  • MIPS 汇编和伪指令

    李 立即加载 MIPS 中的伪指令根据常量的符号和大小以不同方式将常量加载到寄存器中 例如 当常量是二进制补码的 16 位数字 2 15 我找到的链接没有具体解决这个问题 如果你用例子来解释的话那就太好了 我使用火星模拟器 LI当立即数可以
  • MIPS 如何比较从输入中获取的字符?

    我的程序询问用户他 她正在考虑的数字是否在列表中 用户输入y或n 如何检查用户是否在汇编中输入了 y 或 n 将用户输入放入寄存器中是否足够 如果等于 121 y 的十进制 ASCII 代码 则分支 或者如果该值等于 110 n 的十进制
  • mips 中的排序数组(汇编)

    我正在使用 mips 进行课堂学习集会 我正在对数字数组进行排序 我认为我的方法工作正常 但有点麻烦 我不知道如何检查我是否完全排序 我使用了一种非常基本的排序方法 但这就是迄今为止我们所学到的全部内容 另外 我不知道如何输出数字来检查它是
  • MIPS 中括号的作用是什么?

    我一直在阅读一本介绍 MIPS 的项目书 但遇到了一个问题 书中的一行代码是lb t3 t2 我不知道括号的作用 因为在此之前 我还没有看到它们被使用过 而且本书一开始就没有提到它们 为什么代码不只是lb t3 t2 MIPS 寻址模式语法
  • C++ int 操作在 mips 架构上是原子的吗

    我想知道我是否可以在不锁定 mips cpu 的情况下读取或写入共享 int 值 尤其是 Amazon 或 Danube 我的意思是 如果这样的读取或写入是原子的 其他线程不能中断它们 需要明确的是 我不想阻止线程之间的竞争 但我关心 in
  • 为什么我的 MIPS 基础转换器在当前值之后打印出前一个循环的值?

    我对 MIPS 很陌生 这让我完全困惑 我编写了一个程序来转换基数 第一次运行时效果很好 但是当它循环时 它会显示先前循环迭代中其他寄存器的值 输出如下 我已经尝试了我能想到的一切 但我没有想法 Enter a decimal number
  • MIPS 中基于指针的数组访问

    MIPS 中基于指针的数组访问是什么意思 基于指针的数组访问 还有一个额外的可能含义或含义 您可能有一个指向数组的指针 而不是位于固定地址的数组 实际上 在 C C 中 指向数组的指针 实际上通常只是指向数组第一个元素的指针 基本上 您有一
  • MIPS 汇编中的 C 数组索引?

    问题 void swap int v int k int temp temp v k v k v k 1 v k 1 temp 我的问题是为什么 intv 被添加 t1 无论是谁做的 甚至都没有发表评论 所以我假设 a0 isv and a
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • MIPS汇编中$是什么意思?

    什么是 在 MIPS 汇编语言中是什么意思 举个例子 Add 28 R4 R3 表达式中的美元符号是什么 在汇编程序中 符号 通常表示两种不同的含义 数字前缀表示该数字以十六进制书写 本身是一个数值表达式 其计算结果为 当前位置 即组装下一
  • 如何在 MIPS 汇编中找到没有除法或模运算符的余数

    我想找到一种方法来知道一个整数是除以3还是7而不使用除法 因为它在MIPS汇编中非常慢 我做了很多研究但一无所获 有一种方法描述为格兰隆德和蒙哥马利 https gmplib org tege divcnst pldi94 pdf需要 奇
  • 用 MIPS 汇编语言读取和打印整数

    我的程序应该读取一个整数并将其打印回给用户 但每次它都只打印 268501230 无论输入什么 我该如何修复它 data prompt2 asciiz Please enter value array1 space 40 array2 sp
  • MIPS 汇编:从整数转换为十六进制

    我发现这个代码片段我认为可以将整数转换为十六进制 然而 我根本不遵循它 我添加了一些评论 说明了我认为正在发生的事情 但我不知道为什么要这样做 那么 假设我正确地注意到每行正在做什么 有人可以向我解释为什么要这样做吗 至于它如何以任何方式帮
  • 是否可以将 MIPS 寄存器名称与 GAS(GNU 汇编器)一起使用?

    如果我使用寄存器名称 我会得到 Error illegal operands add t0 zero zero 如果我使用寄存器号 8代替 t0 and 0代替 zero 有用 我使用的是 binutils 2 17 GNU 汇编器不直接支
  • 如何从字符串输入中删除逗号

    我正在开发一个使用 MIPS 本机指令的程序 该程序将允许用户输入三个十进制数字作为空终止字符串 每个数字不能超过六位数字 如果用户输入逗号 例如 123 456 则从内存中删除逗号 第一个数字存储在内存地址 0x10000000 中 第二
  • MIPS 浮点:swc1 与 s.s

    我正在做一些涉及的工作MIPS汇编 我不断遇到这四个浮点加载 存储伪指令 l s l d s s s d 我在网上找到了一些文档 发现有四个 实际 指令似乎可以做同样的事情 lwc1 ldc1 swc1 and sdc1 我唯一的问题是 有
  • 零寄存器如何提高性能?

    在 MIPS ISA 中 有一个零寄存器 r0 始终给出零值 这允许处理器 任何产生要被丢弃的结果的指令都可以将其目标定向到该寄存器 成为一个来源0 据说在这source https web archive org web 20170328
  • 提示用户输入汇编 ci20 seg 错误

    我目前正在 ci20 机器上开发一个小程序 提示用户输入整数值 然后将该值打印到屏幕上 我当前的代码 data prompt asciiz Please enter an integer message asciiz nValue ente
  • MIPS——这重要吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的问题 了解 MIPS 编程语言有用吗 我是一名计算机科学学生 正在上一门以 MIPS 为重点的汇编课程 我很擅长使用高级语言进行编写 但 M
  • 带有适用于 MS-Windows 的工具链的预构建 MIPS 交叉编译器

    我在我的 Linux 机器上使用 MIPS 交叉编译器 效果很好 现在我需要在 Windows 上编译相同的应用程序 我正在网上搜索一些适用于 MS Windows 的预构建 MIPS 交叉编译器 带有工具链 但没有成功 由于我不确定该怎么

随机推荐