在Assembly中输出字符串?

时间:2015-09-25 15:22:04

标签: assembly io

我对在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

谢谢!

1 个答案:

答案 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"是三个完全不同的功能。