彙編學習之路

2021-08-20 20:27:48 字數 3953 閱讀 1621

更好的排版請看原文

輸入輸出先乾為敬

mov ah,1 ;輸入字元

int 21h ;輸入後回顯,鍵入字元的ascll送入al

mov dl,al

mov ah,2

int 21h ;輸出輸入的字元

彙編 對於乙個匯程式設計序有三段:資料段、堆疊段、**段

初始化程式

mov ax,datas

mov ds,ax

為什麼需要這個,因為mov無法實現將立即數傳入段暫存器,但是mov可以將立即數傳入通用暫存器

組合語言程式中,資料的輸入時以字元形式的0~9輸入時對應的ascii碼減掉30h存入主存中的,輸出時是加上30h

輸出外設上的,比如十六進製制a,主存中是0ah,加上37h變成了41h。因為主存中存的就是41h,所以可以直接輸出帶外設上

21h基本功能模組

1 從鍵盤上輸入乙個字元

ah=01h al=輸入自負的ascii碼值

舉例mov ah,01h

int 21h

2 向顯示器輸出乙個字元

入口引數 ah=02h,dl=』輸出字串碼』

舉例mov dl,』c』

mov ah,02h

int 21h

3 向顯示器 輸出乙個字串

ah = 09h

ds = 欲輸出字串的段位址 dx = 欲輸出字串的 偏移位址

mov dx , offset string

mov ah, 09h;

int 21h

完整**:

datas segment

string db 『hello world!』;資料段

datas ends

stacks segment

dw 256 dup(?)

stacks ends

codes segment

assume cs:codes,ds:datas

start:

mov ax ,datas

mov ds, ax ;這裡開始初始化

;此處輸入**段**

mov dx, offset string

mov ah ,09h

int 21h

mov ah,4ch

int 21h

codes ends

end start

判斷大小

cmp 比較.(兩運算元作減法,僅修改標誌位,不回送結果).

ja/jnbe 不小於或不等於時轉移.

jae/jnb 大於或等於轉移.

jb/jnae 小於轉移.

jbe/jna 小於或等於轉移.

以上四條,測試無符號整數運算的結果(標誌c和z).

jg/jnle 大於轉移.

jge/jnl 大於或等於轉移.

jl/jnge小於轉移.

jle/jng小於或等於轉移.

以上四條,測試帶符號整數運算的結果(標誌s,o和z).

十六進製制輸出

示例 start:

mov ax, data

mov ds, ax

mov   bx, x

call listbx ;顯示

mov dl, 'h'

int 21h

exit:

mov ah, 4ch

int 21h

;*************************====

listbx:

mov cx, 0404h

wr1:mov ah, 2

rol bx, cl

mov dl, bl

and dl, 15

cmp dl, 10

jb wr2

add dl, 7

wr2:add dl, 『0』

int 21h

dec ch

jnz wr1

ret

比較兩個數字大小(完整**)

data segment

data1 db』比較無符號資料大小!』,0dh,0ah,』′d

ata3

db′c

x中的較

大數為′

,0dh

,0ah

,′′ da

ta3d

b′cx

中的較大

數為′,

0dh,

0ah,

′』

;data4 dw」,』$』

data ends

code segment

assume cs:code,ds:data ; 說明**段、資料段

start:mov ax,data

mov ds,ax ;給ds賦值段

mov dx,offset data1

mov ah,9

int 21h ;顯示提示」

mov dx,offset data3

mov ah,9

int 21h

start1:

mov ax,12abh

mov bx,4cbah

cmp ax,bx

jae next

xchg ax,bx

next:

mov cx,ax

math: ;是數字加30h

cmp cx,』0』 ;輸入字元與0比較

jb start2 ;小於0轉移

cmp cx,』9』 ;輸入字元與9比較

ja start2 ;大於9轉移

;add cx,30h

;二進位制輸出

;start2:

; ;輸出

; mov data4,cx

; mov dx,offset data4;賦值

; mov ah,9h;呼叫9號功能呼叫輸出字元

; int 21h

;start2:

; mov bx,cx ;給定乙個4位的16進製制數

; mov data4,cx

; mov ah,2 ;向標準輸出裝置輸出乙個字元

; mov cx,16;迴圈16次

;again:

; mov dl,』0』 ; 假定當前bx的最高位為0

; add bx,bx ; bx=bx*2 也就是左移1位

; jnc disp ; 進製標誌不置位時(即bx的最高位為0時)轉disp

; inc dl ; 進製標誌置位時(即bx的最高位為1時)加1

;disp:

; int 21h

; loop again

; mov ah, 4ch ;程式結束

; int 21h

start2:

;mov data4,cx

mov bx,cx

call listbx ;顯示

mov dl,』h』

int 21h

exit:

mov ah, 4ch

int 21h

;*************************====

listbx:

mov cx, 0404h

wr1: mov ah, 2

rol bx, cl

mov dl, bl

and dl, 15

cmp dl, 10

jb wr2

add dl, 7

wr2:

add dl, 『0』

int 21h

dec ch

jnz wr1

ret

code ends

end start

彙編學習之路之DS

cpu要讀讀寫乙個記憶體單元的時候,必須先給出這個記憶體單元的位址,在8086pc中,記憶體位址由段位址和偏移位址組成,8086cpu中有乙個ds暫存器,通常用來存放將要訪問資料的段位址 比如,我們要讀取記憶體單元為 1000h中的內容,可以用下面的程式段進行 mov bx,1000h mov ds...

彙編學習之路之 8086CPU

8086 cpu 給出實體地址的方法 8086 cpu 有20位位址匯流排,可以傳送2位位址,達到1 mb的定址能力。8086 cpu又是16位結構,在內部一次性處理,傳送,暫時儲存的位址是 16位。從8086 cpu的內部結構來看,如果將位址從內部簡單的發出,那麼,它只能送出16位位址,表現出的定...

httpRunner學習之路 問題之路

成長過程中,都會遇到問題,就看如何解決!今天想再次研究該框架。因為前面又碰到了一些問題。而技能有限,又需要再次學習js的各項技能。實在耗不起精力。轉而繼續對自己擅長的python入手。按照教程說,先來嘗試一番。建立工程進行開始第一步吧。用相關命令直接生成對應的專案資料夾。hrun startproj...