導航:首頁 > 編程知識 > 如何定義一個匯編程序段

如何定義一個匯編程序段

發布時間:2022-10-08 13:24:55

A. 如何編寫完整的匯編程序

看很多資料的話就應該懂得寫啊,先看那個王爽的書咯,到第四章差不多就會寫了。努力啊

B. 如何用匯編編寫以下程序

一個匯編程序是由多個段組成的,這些段被用來存放代碼、數據或當作棧空間來使用。

一個有意義的匯編程序中至少要有一個段,這個段用來存放代碼。

程序結束標記

End 是一個匯編程序的結束標記,編譯器在編譯匯編程序的過程中,如果碰到了偽指令 end,就結束對源程序的編譯。

如果程序寫完了,要在結尾處加上偽指令end 。否則,編譯器在編譯程序時,無法知道程序在何處結束。

C. 請高手解釋下匯編語言的代碼段和程序段的具體定義和變數的定義方法,有離子的最好.

代碼段和程序段定義的名字可以任意,只是代碼段會被執行,由最後的end +標號指出起始標號 以湯叔的程序為例
SixteenBits DW 12345
這句話定義了一個16位的變數 sixteenbits
定義格式 變數名+長度+初值

段定義方式
不加描述符的最簡單的段定義
段名+segment 後以段明+ends表明段結束
在下面這個程序里 data段是數據段 code段是代碼段

Assume CS:Code,DS:Data 這條偽指令指定段的關聯寄存器

; 本程序通過編譯,運行正確。

Data Segment
SixteenBits DW 12345
Data Ends

Code Segment
Assume CS:Code,DS:Data

Start: mov ax,Data ;取數據段地址
mov ds,ax ;賦給數據段寄存器ds
mov ax,SixteenBits
push cs
pop ds
lea di,binary ;二進制字元串首地址
mov cx,16 ;移位次數
cld
push di

; 轉換成二進制字元串
Shift_Left: sal ax,1 ;算術左移
jc Carry_Yes ;有進位,跳轉
mov byte ptr [di],'0' ;無進位
jmp Next_Bit
Carry_Yes: mov byte ptr [di],'1' ;有進位
Next_Bit: inc di
loop Shift_Left

mov byte ptr [di],'$' ;字元串結束符
pop dx

; 顯示二進制字元串
mov ah,9
int 21h

Exit_Proc: MOV AX,4C00H ;結束程序
INT 21H

binary:

Code ENDS
END Start ;編譯到此結束

D. 匯編中的程序段的概念

匯編中的程序段是指通過一個段寄存器給出的段地址和以某種方式給出的偏移地址組合所能直接訪問的一段內存。為方便對存儲器的訪問,數據、程序等等均放在各自的段寄存器所能方便控制訪問的存儲器區域中(程序段中)。在程序段中,能存放多個子程序。

E. 匯編程序段中數據段的定義

DATASEGMENT
STR1DB'whatisyourname?',13,10,'$'
CNEQU$-STR1
STR2EQUSTR1+CN-5
DATAENDS

CODESEGMENT
ASSUMECS:CODE,DS:DATA,ES:DATA
START:MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVDX,OFFSETSTR1
MOVAH,9
INT21H
MOVSI,OFFSETSTR1
MOVDI,OFFSETSTR2
MOVCX,CN
ADDSI,CN-1
ADDDI,CN-1
STD
REPMOVSB
MOVDX,OFFSETSTR2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART


教材中有詳細的介紹,請認真閱讀,多復習。
es是附加數據段段地址,程序中是將數據段和附加數據段同段。
str1是21個位元組。
cn和str2在這里都是常量。
數據段中只定義了存儲區str1。(但又將str2當存儲區使用,這種用法少見,不要學!)

============================================================
以上操作的問題,str2並未申請緩沖區,在執行時有越界的風險!
============================================================
以下是規范的程序:
DATASEGMENT
STR1DB'whatisyourname?',13,10,'$'
CNEQU$-STR1
STR2DBCNDUP(?)
DATAENDS

CODESEGMENT
ASSUMECS:CODE,DS:DATA,ES:DATA
START:MOVAX,DATA
MOVDS,AX
MOVES,AX
LEADX,STR1
MOVAH,9
INT21H
LEASI,STR1
LEADI,STR2
MOVCX,CN
ADDSI,CN-1
ADDDI,CN-1
STD
REPMOVSB
LEADX,STR2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

F. GNU 匯編: 第一個匯編程序

匯編語言程序由定義好的段構成, 每個段都有不同的目的, 最常用的三個段如下

.section 命令語句可聲明段, .section 語句只有一個參數, 這個參數用來聲明段的類型.

獲取 cupid 的程序: demo.s

gcc 標簽識別 main 標簽, 更改 _start 為 main 然後執行:

如果使用的是 WSL, 64位的 WSL 環境默認無法編譯運行32位程序, 可通過如下方案運行 (參考 https://github.com/Microsoft/WSL/issues/2468 ):

G. 匯編段定義語句

END START 這行有兩個作用:一是告訴匯編程序,本源程序結束,匯編到此為止;二是告訴匯編程序,本程序的入口地址在start這個標號所在處。只有主程序所在的源文件中的END後才需要加start之類的標號。其他的非主程序所在的源文件最後的end後是不需要加上start之類的標號的。

H. 一個完整的匯編程序至少需要定義一個段,即____段

一個完整的匯編程序至少需要定義一個段,即 代碼 段.
[80x86匯編語言程序設計教程]有提及這句話:
"通常情況下,代碼和數據分別在代碼段和數據段中,但有時代碼和數據可以合並在一個段中.一個完整的匯編語言源程序至少含有一個代碼段,但一個匯編語言源程序模塊卻可以只有數據段.目前,我們總把數據段安排在程序的前面,把代碼段安排在程序的後面,但不是非要這樣安排."

I. 匯編語言子程序是如何定義的

這樣定義的:

子程序名 PROC NEAR|FAR

.

.

RET

子程序名 ENDP

子程序名相當於標號,表示本過程的符號地址。過程有NEAR和FAR兩種類型,FAR型的過程可供段間調用,NEAR型過程僅供段內調用。

在一個過程中,至少要有一條返回指令RET,它可以書寫在過程中的任何位置,但是過程執行的的最後一條指令一定是RET。

(9)如何定義一個匯編程序段擴展閱讀:

注意事項

一、子程序調用指令

格式:CALL [NEAR PTR] 子程序名

CALL指令的兩個作用,1.將斷點地址(CALL指令的下一條指令地址)壓棧保存,2.轉去子程序執行。

[NEAR PTR]可以省略。

二、返回指令

格式:RET [N]

指令作用:實現子程序執行完後返回主程序的指令。從堆棧棧頂彈出一個字數據(段內調用)送入IP作為返回地址。N是立即數,執行完RET之後,再將SP增加N,也叫「平棧」。

J. 如何編寫最簡單的匯編語言

首先明白編譯環境:以上4個exe程序必須在32機中運行,若是64位機,請參照dosbox0.74(如何在64位機中使用debug)使用方法。

了解計算機CPU原理:詳情請參照「80X86計算機組織」和「80X86的指令系統和定址方式」

首先有一道題:

求表達式Y=A*X+B-C的值,已知A、B、C分別存放在DA-1、DA-2、DA-3位元組單元,它們的值分別是:5 、 6、 7,X存放在INPUT位元組單元,結果Y放入jsJ_10位元組單元。

分析順序結構程序代碼:由記事本敲出來的

data segment da_1 db 5 da_2 db 6 da_3 db 7 input db 1 jsj_10 db 0data ends ;這一段在內存中定義了一個段,叫做data,並且其中存入了5個變數並且付入初值,db代表每個變數佔用1個位元組,若是dd則為字,為2個位元組code segment ;名字叫做code的段的定義,顯然這兒作為代碼段,當然code這個名字可以更改 assume cs:code,ds:data ;指定data為DS數據段,code為CS代碼段start: mov ax,data ;加法指令 mov ds,ax ;加法指令 mov al,da_1 ;加法指令

mov bl,input ;加法指令

mul bl ;乘法 add al,da_2 sub al,da_3 ;減法 mov jsj_10,al

exit: mov ah,4ch int 21h ;這兩行相當於ret(返回值),就像C語言中的return 0;

code ends end start

注釋: XXXX segment

.............

XXXX ends ;定義一個段

assume ds:XXXX 把XXXX段指定為ds(ds是段地址寄存器)

請先提前把masm edit debug link文件放入預定的文件夾,並把編寫的xxxx.asm代碼文件放入該文件夾,asm文件可用記事本寫成,並改格式txt為asm(有的看不到文件後綴.txt的請參照網路

閱讀全文

與如何定義一個匯編程序段相關的資料

熱點內容
蛇片帶點顏色的電影 瀏覽:482
中越戰電影大全百度雲 瀏覽:227
倆人鑽大象肚子里是什麼電影 瀏覽:583
搶佔大數據發展制高點 瀏覽:683
零售業大數據分析對象 瀏覽:449
攻是軍人受是農村人 瀏覽:734
私人賣小說的微信號 瀏覽:140
如何卸載住小幫app 瀏覽:986
怎麼把視頻傳到qq微雲 瀏覽:408
台灣四級片女明星有哪些 瀏覽:9
電影頭像 瀏覽:812
什麼網站可以出售電子書 瀏覽:872
快手數據刪除了怎麼辦 瀏覽:215
德國女納粹皮靴踩人 瀏覽:364
怎麼列印qq群里的文件 瀏覽:119
上皇後的小說 瀏覽:527
造夢西遊3粉色氣球代碼 瀏覽:765
成人兒子吃媽媽的奶電影 瀏覽:97
魅藍隱藏文件夾在哪裡設置密碼 瀏覽:752
給我一個看片網站 瀏覽:292

友情鏈接