我对在Assembly中输出字符串感到很困惑。我被告知使用“PUTS”汇编程序名称将字符打印到控制台,但我不知道如何使用它。 这是我到目前为止所做的,但它会导致错误:
LD R1, MESS_ARR; Array in register 1
PUTS R1; Print out the string at first index
ADD R1,R1,1; Add to go to next memory location
谢谢!
答案 0 :(得分:2)
在汇编程序中,没有真正的I / O命令。
相反,所有设备都有一个地址,您可以将数据写入该地址。
示例(此处为ARM处理器的汇编程序):
LR R0, =65 ; Load byte 65 ('A') into register 0
LR R1, =123456 ; Load 123456 into register 1
STB R1, [R0] ; Write the value to address 123456
这取决于计算机(或模拟器)必须写入某些数据的地址,以便将数据写入屏幕,打印机或任何其他设备。
您通常做的是调用现有的子程序:
LR R0, =65
BL putc ; call sub-routine "putc"
...
; putc = write character in register R0
putc:
LR R1, =123456 ; Load 123456 into register 1
STB R1, [R0] ; Write the value to address 123456
MOV PC, LR ; Ret
调用子例程的说明通常命名为" CALL"," BL"," JL"," JRS",&# 34; BRS" (取决于CPU)......
有一些名为" INT"," BRK"," SWI"," SVC"," SYSCALL&#的特殊变体34; ...用于调用OS函数。
我猜您会将汇编程序用于MIPS处理器,因此您的程序可能的工作方式如下:
LR R3, MESS_ARR
JL puts
ADD R3,R3,1
但是,不知道您正在使用哪种CPU而不知道操作系统(或CPU仿真器),几乎不可能说这段代码是否正确。
(B.t.w:" putc"将输出一个字符," puts"将字符串的地址作为输入参数并输出整个字符串。)
请注意,该名称通常区分大小写,因此" puts"," PuTs"和" PUTS"是三个完全不同的功能。