組合語言中,為什麼定義堆疊段的時候後面要多加stack如 stack segment s

2021-05-23 19:56:28 字數 1102 閱讀 6054

1樓:匿名使用者

assume cs:code,ss:stack,ds:data ; 段說明, 自己定義的code對應**段, stack對應堆疊段, data對應資料段

stack segment stack ; 堆疊段的定義byte 64 dup(0)

stack ends

data segment ; 資料段的定義msg byte 'hello world!$'

data ends

code segment ; **段的定義start:

mov ax,data

mov ds,ax

mov dx,offset msg

mov ah,9

int 21h

mov ax,4c00h

int 21h

code ends

end start

;**********===以上是一個常見的定義**********===

masm 5.0 以後也支援簡化定義如 .data 為資料段 .code表示**段, 形式如下:

.model small

.stack 200h ; 定義堆疊段大小.data ; 定義資料段

szmsg db 'hello world!',13,10,'$'

.code ; **段的定義

start:

mov ax,@data

mov ds,ax

mov es,ax

mov si,0

mov es:[bx+1+si],ah

lea dx,szmsg

mov ah,9

int 21h

;暫停,任意鍵關閉

mov ah,1

int 21h

mov ah,4ch ;結束,可以修改al設定返回碼int 21h

end start

彙編新手:我明明在**中定義了棧段,為什麼編譯時還有這個link : warning l4021: no stack segment

2樓:匿名使用者

你肯定沒有完整定義,例如:stack1 segment stack.

組合語言的DW是什麼意思,組合語言中的DW怎麼用,能舉個例子說明一下嗎

dw 是定義2位元組空間的意思。dw屬於彙編的一個偽指令,dw定義字型別變數,一個字資料佔2個位元組單元,讀完一個,偏移量加2。db定義位元組型別變數,一個位元組資料佔1個位元組單元,讀完一個,偏移量加1。dd定義雙字型別變數,一個雙字資料佔4個位元組單元,讀完一個,偏移量加4。彙編指令既不控制機器...

彙編子程式的問題,組合語言子程式是如何定義的

這不是返回自己本身迴圈執行,而是跳轉到子程式的第一行迴圈而已,有什麼不可以的,迴圈結構,任何地方都可以的。但有一點,子程式不論迴圈多少次,最終必須執行一行返加指令ret,也就是子程式必須要有一條ret指令,你的子程式最後是缺少一行ret指令的,加上了就可以的。組合語言子程式是如何定義的?這樣定義的 ...

組合語言PUSHCH合法嗎?為什麼

不合法,push語句16位下支援的是字操作,ch是位元組操作,所以是不合法 附 格式 push oprd 功能 實現壓入操作的指令是push指令 說明 1.oprd為16位 字 運算元,可以是暫存器或儲存器運算元.2.push的操作過程是 sp sp 2,sp oprd 即先修改堆疊指標sp 壓入時...