更好的排版請看原文
輸入輸出先乾為敬
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...