彙編語言

1.8086的尋址方式

1.1 立即數尋址方式

1.2 寄存器尋址方式

1.3 存儲器尋址方式

1.4 數據尋址尋址方式

2.8086 指令系統

2.1 數據傳送指令

MOV(傳送指令)
XCHG(交換指令)
XLAT(換碼指令)
PUSH(進棧指令)
POP(出棧指令)
LAHF(標誌送AH指令)
SAHF(AH送標誌指令)
PUSHF(標誌進棧指令)
POPF(標誌出棧指令)
LEA (有效地址傳送指令)
LDS/LES(指針傳送指令)

2.2算數運算類指令

CF(進位指令)
OF(溢出指令)
INC(增量指令)
DEC(減量指令)

ADD(加法指令)
SUB(減法指令)
MUL(無符乘法指令)
IMUL(有符乘法指令)
DIV(無符除法指令)
IDIV(有符除法指令)



2.3位操作指令

邏輯運算指令:
AND(邏輯與指令)
OR(邏輯或指令)
XOR(邏輯異或指令)
NOT(邏輯非指令)
移位運算指令(Shift+Logcal/Arithmetic):
shl(邏輯左移)
shr(邏輯右移)
sal(算數左移)
sar算數右移)

循環移位指令(Rotate):
rol(不帶進位左移)
ror(不帶進位右移)
rcl(帶進位左移)
rcr(帶進位右移)

2.4控制轉移指令

無條件轉移指令
條件轉移指令
循環指令
子程序指令

2.5處理機控制類指令

NOP  (空操作指令)
SEG(超前越前綴指令)
LOCK(封鎖前綴指令)
HLT(暫停指令)
ESC(交權指令)
WAIT(等待指令)

3.彙編語言程序格式

3.1 參數、變量和符號

3.2 複雜數據結構

3.2 彙編語言程序開發

程序結構:
代碼段
數據段
堆棧段

程序題:

彙編語言:求最大值

assume cs:code ,ds:data
data  segment
  buffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902, 14255
         dw 40623, 47645, 15575, 51572, 18110, 26511, 14880, 5921, 31999
         dw 2893, 21056, 16574, 147, 25532, 33336, 5251, 64269, 31514, 23670
         dw 53335, 49581, 57895, 25689, 51697, 58198, 27548, 54151, 41373
         dw 44382, 23511, 39326, 56955, 51911
    max  dw ?
data ends 

code segment 
start :  
    mov ax,data
    mov ds,ax
    mov cx,offset max-offset buffer
    shr cx,1 ;cx右移一位,個數減半    
    mov bx,0

    dec cx
    mov ax,[bx] ;先將ax放入第一個數據
    inc bx
    inc bx
 s: cmp ax,[bx]
    jae next    ;若ax>=[bx]則跳轉到next
    mov ax,[bx] ;若ax<[bx]則將ax換成現在最大的。
next:inc bx
    inc bx      ;向後移動一個數據
    loop s
    mov  max,ax

    mov ax,4c00h
    int 21h
code ends 
end start

統計二進制中1的個數(彙編)

data segment
    str db 'the result is:$'
data ends  
 
 
code segment
    assume cs:code,ds:data
start:
    mov ax,data         
    mov ds,ax
    
    mov dx,offset str
   
    mov ah,09h    ;輸出字符串的功能,但是使用前必須將字符串的地址放到dx中  lea dx str 或者 mov dx,offset str
    int 21h
    
    mov ax,0ffffh ;初始化
    mov cx,16      ;循環變量
    mov dl,0       ;統計1的個數
    
next:
    
    rol ax,1     ;循環左移    
    
    jnc next1    ;表示cf=0,則跳轉到next1
    
    inc dl     ;計數
next1:
    dec cx
    jnz next
    
    mov al,dl
    aam        ;調整
    
    push ax     ;先將這個ax的值保存在棧中
    
    mov dl,ah     ;查看高位的值
    add dl,30h   ;數字+30h編程字母  0的ASCII碼30h
    mov ah,02h     ;ah放2,是2號功能,字符輸出,並且要輸出的字符是已經放在dl裏面的
    int 21h
    
    pop ax
    mov dl,al
    add dl,30h 
    
    mov ah,02h
    int 21h
    
code ends
    end start
    
     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章