2015-09-25 58 views
0

我真的很困惑在Assembly中輸出字符串。我被告知使用「PUTS」彙編程序名稱將字符輸出到控制檯,但我不確定如何使用它。 這裏是我到目前爲止,但它會導致錯誤:在Assembly中輸出字符串?

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 

謝謝!

回答

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」,「 BRS「(取決於CPU)...

有一些名稱分別是」INT「,」BRK「,」SWI「,」SVC「,」SYSCALL「......用於調用OS功能。

我猜你使用匯編的MIPS處理器,以便你的程序威力工作是這樣的:

LR R3, MESS_ARR 
JL puts 
ADD R3,R3,1 

但是不知道您正在使用哪種CPU的,不知道操作系統(或CPU模擬器)幾乎不可能說這個代碼是否正確。

(順便說一句:「putc將」將輸出一個字符,「把」將字符串作爲輸入參數和輸出的整個字符串的地址。)

注意,名稱通常是大小寫敏感的,從而「 put「,」PuTs「和」PUTS「是三個完全不同的功能。

+0

謝謝。我正在使用Linux。我發現使用TRAP x22將其打印到控制檯 – Shan