ETH官方钱包

創作內容

5 GP

Remove the String(Assembly language X86)

作者:Breguet│2014-01-14 18:33:59│巴幣:10│人氣:966
題目要求:使用者輸入一字串,輸入第一個數字代表要移走字串的開頭,輸入另一個數字代表要移走字串的數目,運用INVOKE。

EX:
input: I am ha*****ppy.
input:7
input:5
output: I am happy.

關鍵:
INVOKE 與CALL最大的不同在於是否可傳值,
例:
call Str_remove
INVOKE Str_remove,ADDR target,rmStart,rmNumber

要注意的是要丟什麼值,就必須在data section裡寫好:
Str_remove PROTO,
tarStr:PTR BYTE,
rmS:DWORD,
rmN:DWORD
PROTO主要應用於multiprogram,也可採多分頁來呼叫。
ADDR 是傳記憶體位置,與OFFSET相似。

執行畫面:



SOURCE CODE

TITLE String remove(Str_remove.asm)
INCLUDE Irvine32.inc
.data
Str_remove PROTO,
tarStr:PTR BYTE,
rmS:DWORD,
rmN:DWORD
myMessage BYTE "Please input a string:",0
askF BYTE "Please input first number:",0
askL BYTE "Please input second number:",0
resultMsg BYTE "result:",0
target BYTE 200 DUP(0)
rmStart   DWORD ?
rmNumber  DWORD ?
.code
main PROC
mov edx,OFFSET myMessage
call writeString
mov edx,OFFSET target
mov ecx,SIZEOF target
call readString
mov edx,OFFSET askF
call writeString
call readInt
mov  rmStart,eax
mov edx,OFFSET askL
call writeString
call readInt
mov  rmNumber,eax
mov edx,OFFSET resultMsg
call writeString
INVOKE Str_remove,ADDR target,rmStart,rmNumber
call crlf
call main
exit
main ENDP

Str_remove PROC,
tarStr:PTR BYTE,
rmS:DWORD,
rmN:DWORD
mov esi,tarStr
mov ecx,rmS
L1:
mov al,[esi]
call writeChar
add esi,1
loop L1
add esi,rmN
mov edx,esi
call WriteString
ret
Str_remove ENDP
END main
引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=2309433
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Assembly language X86|String|program

留言共 1 篇留言

ays.
看不懂QAQ(還沒學~

01-14 20:08

我要留言提醒:您尚未登入,請先登入再留言

5喜歡★NTUCSIE 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:count letter... 後一篇:Reverse Arra...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】