這篇是乙個複製檔案的匯程式設計序,它的作用是將當前目錄下的乙個檔案的內容複製到另乙個檔案中。
這個程式有以下幾點需要注意的地方:
下面給出源**:
dseg segment
errmsg db 'error:cannot open file$'
input1 db 'source file:$'
input2 db 'destination file:$'
filename1 db 20,?
,20dup(0)
filename2 db 20,?
,20dup(0)
buff db 512
dup(?)
dseg ends
sseg segment stack
stktop db 80h dup(?
)sseg ends
cseg segment
assume ds:dseg,cs:cseg,ss:sseg
openfile proc
mov dx,si
mov ah,
9h int
21h ;提示字串
mov dx,di
mov ah,
0ah int
21h ;輸入源檔名
mov bl,
[di+1]
xor bh,bh ;擴充套件為字
mov [bx+di+2]
,bh ;最後一位置0
lea dx,
[di+2]
retopenfile endp
newline proc
push dx
push ax
mov dl,
0ah mov ah,
02h int
21h ;輸出換行符
pop ax
pop dx
retnewline endp
start:
mov ax,dseg
mov ds,ax ;設定資料段
mov ax,sseg
mov ss,ax ;設定堆疊段
mov ax,length stktop
mov sp,ax ;設定棧頂指標
lea si,input1
lea di,filename1
call openfile
mov ax,
3d00h ;讀 模式開啟檔案
int21h jc err
call newline
mov bx,ax
lea dx,buff
mov cx,
512;最大讀取位元組數
mov ah,
3fh int
21h ;讀取檔案內容
mov cx,ax
mov ah,
3eh int
21h ;關閉檔案
lea si,input2
lea di,filename2
call openfile
push cx
xor cx,cx
mov ah,
3ch ;建立檔案
int21h jc err
pop cx
call newline
mov ax,
3d01h
int21h ;以寫模式開啟檔案
jc err
mov bx,ax
lea dx,buff ;寫內容
mov ah,
40h int
21h mov ah,
3eh int
21h ;關閉檔案
jmp end_
err:
call newline
lea dx,errmsg
mov ah,
9h int
21h ;輸出錯誤資訊
end_:
mov ah,
4ch int
21h ;退出
cseg ends
end start
**中寫了許多注釋,此處不再贅述。 龍芯組合語言 利用系統呼叫複製檔案
from 距離龍芯上的彙編版的hello,world 出現已經有段日子了。下面這個程式在那個的基礎上多用了幾個系統呼叫。更多的系統呼叫請參考 usr include asm unistd.h,也可以用類似man 2 open的指令來看系統呼叫的詳細的引數。aa aa copy home copy c...
組合語言 AT T組合語言
這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...
VS2010檢視原始碼對應的組合語言
在學習c 中const關鍵字的過程中,經常會看到各種暫存器 彙編指令分析,像下面的圖這樣 左圖是g 中反彙編的效果,右圖是vs中反彙編的效果。如果我們想要檢視原始碼所對應的組合語言,應該怎麼操作呢?1.ubuntu系統g g 中一般使用gdb進行除錯。build cmakelists.txt inc...