0513 組合語言源程式組織

2021-10-07 17:43:36 字數 1447 閱讀 7425

data segment

x dw 4-----按字儲存,db按位元組儲存

y dw 5

z dw ?

data ends

code segment

assume cs:code, ds:data

start: mov ax, data

mov ds, ax

mov bx, x

mov ax, y

add ax, bx

mov cl, 3

sal ax, cl

sub ax, x

sar ax, 1

mov z, ax

mov ah, 4ch

int 21h

code ends

end start

(1)指令語句格式

標號:指令助記符 運算元;注釋

例:l1: add al,bl ;暫存器內容相加

標號字段:任選,位於指令開頭,以冒號結尾

變數:引用的是偏移量

(2)偽指令語句格式,功能通常是分配空間,計算表示式,定義常量等【不能生成機器指令**】

符號名偽指令符 運算元 ;注釋

​ var eqa 10,var是常量,不是變數

變數,指某乙個特定的記憶體單元,是具體的實在的。

三種固有屬性:段屬性,偏移量屬性,類屬性

(1)變數定義偽指令

語句格式:變數名 db 表示式1,表示式2…

變數名是可選的,也可以直接 db 表示式1,表示式2…

dd雙字  dq 8個位元組

例子:var db 12h

mov ax var;意思是把var位址裡面的值存進ax裡面,存的不是位址

(2)變數初值設定

表示式 dup(2) 表示式表示個數,2表示值【注意分開的數的話就會有逗號分隔,表示式和dup沒有逗號分隔】

(3)變數的引用

變數在指令語句中的引用時位移量,然後用儲存器定址方式取值;

變數在偽指令中的引用是段內偏移量或邏輯位址【針對取字操作】

偽指令中的表示式直接計算結果作為內容

段基址是20bit,段基值是16bit

課堂題目:

num1,num3是段內偏移量

1.mov ax, num3-num1

正確,num3-num1表示的是偏移量的差,不是內容之差,偏移量沒有加法,把這個差值存入ax

2.mov num1, ax+num3

錯誤,不能對暫存器名稱進行這類操作【表示式中不能使用儲存單元名稱,包括暫存器、記憶體單元、埠,除了減法表示式】

堆疊段堆疊為空時,sp指向棧最底部的高乙個位元組位址,棧的第乙個字位址是最底部的低乙個位元組位址。

組合語言的源程式執行

end 不是ends assume 假設 debug寫入 單獨編成原始檔在編譯成可執行檔案 執行命令 g go 乙個記憶體單元描述 記憶體單元長度 型別 表示乙個記憶體單元或暫存器中的內容 學習方便的約定 描述物件 描述方法 描述物件 描述方法 ax中內容0010h ax 0010h 2000 10...

組合語言學習之組合語言源程式的輸入

在dos下輸入彙編源程式的方法 一 環境的搭建 二 熟悉debug的一些除錯指令 當顯示器顯示出提示符 時,說明已進入到debug狀態,此時,可以用debug命令列來操作 1.r 指令 用法 r 暫存器的名字 作用 用於檢視暫存器的值 register的首字母 或者修改暫存器的內容。當暫存器的名字省...

彙編源程式的組織結構

一般情況下,乙個彙編源程式需要定義3個段 text data bss 這個源自unix的傳統 和a.out的結構有關 不過在現在的linux裡,這三個部分不叫 段 segment 而叫作 區 section 這可能和linux使用elf execution and linking format 有關...