我學習組件使用以下的Hello World程序如何打印字符串的長度在裝配
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;our string
len equ $ - msg ;length of our string
原來的問題我是什麼是字符串的長度的意思。這是否意味着字符數或內存中的長度(字節數)? 檢查這個我想打印變量len。我怎樣才能做到這一點?我天真地試圖定義新的變量
len2 equ $ - len
,然後改爲運行
mov edx,len2 ;message length
mov ecx,len ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
嘗試打印LEN,但這種印刷什麼。如何打印由len代表的號碼?
您可能需要檢查[**如何在彙編NASM中打印數字**](https://stackoverflow.com/questions/8194141/how-to-print-a-number-in-assembly- nasm)簡短的回答是你寫*字符*到'stdout'。數字是一個十進制值,而不是可以立即寫入的字符串,您必須將整數或無符號值轉換爲其字符表示形式,然後將其寫入'stdout'。 –
出於好奇,你編程的操作系統是什麼?視窗? Unix的?蘋果系統?我在問,因爲在這樣的問題之上,經常有人問這個問題是否使用了錯誤平臺的教程。 –
謝謝。我正在使用Ubuntu。出於好奇,當我嘗試直接使用stdout打印數字時,我什麼也沒有得到。爲什麼它不打印什麼,而不是打印一些廢話? –