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