日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

十四、汇编指令(存储、加法、减法、乘法、除法、跳转、子程序、if判断、中断)

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十四、汇编指令(存储、加法、减法、乘法、除法、跳转、子程序、if判断、中断) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0. 存儲指令

語法:

mov 寄存器,寄存器 mov 寄存器,[偏移地址] mov [偏移地址],寄存器 mov ds:[偏移地址],寄存器

?

1. 加法指令

add 加法

語法:

add 目的操作數,源操作數

執行的操作:目的操作數 <- 目的操作數 + 源操作數

實例:

assume cs:daima daima segmentmov ax,1000Hmov bx,2000Hadd bx,axmov ax,4c00Hint 21H daima ends end

inc 加1

語法:

inc 操作數

?執行的操作:操作數 <- 操作數 + 1

實例:

assume cs:daima daima segmentmov ax,1000Hinc axadd bx,axmov ax,4c00Hint 21H daima ends end

?

2. 減法指令

sub 加法

語法:

sub 目的操作數,源操作數

執行的操作:目的操作數 <- 目的操作數 -?源操作數

實例:

assume cs:daima daima segmentmov ax,5000Hmov bx,3000Hsub ax,bxmov ax,4c00Hint 21H daima ends end

dec 加1

語法:

dec 操作數

?執行的操作:操作數 <- 操作數 -?1

實例:

assume cs:daima daima segmentmov ax,1001Hdec axmov ax,4c00Hint 21H daima ends end

加減法匯總實例

;段地址偏移地址2000-2005中依次放入數據FF、FE、FC、FB、FAassume cs:daima daima segmentmov ax,2000Hmov ds,axmov bx,0000Hmov ah,0FFHmov [bx],ahinc bxdec ahmov [bx],ahinc bxdec ahmov [bx],ahinc bxdec ahmov [bx],ahinc bxdec ahmov [bx],ahmov ax,4c00Hint 21H daima ends end

?

3. 循環指令

loop 循環指令(for)

語法:

loop 標號

執行步驟:

a 將cx寄存器中的值減1

b 判斷cx寄存器中的值是否為0.不為0轉至標號處執行程序,為0向下執行。

標號:在匯編程序中,為指令的位置標記。

模型:

mov cx,循環次數 標號:循環體 loop 標號

實例

assume cs:daima daima segmentmov ax,0000Hmov cx,2HA:inc zxloop Amov ax,4c00Hint 21H daima ends end ;段地址偏移地址2000-2005中依次放入數據FF、FE、FC、FB、FAassume cs:daima daima segmentmov ax,2000Hmov ds,axmov bx,0000Hmov ah,0FFHmov [bx],ahmov cx,4HA:inc bxdec ahmov [bx],ahloop Amov ax,4c00Hint 21H daima ends end

?

4. 乘法指令

MUL

作用:乘法運算

格式:MUL (寄存器? |? 內存單元)

8位乘數時,被乘數在AL內,乘積將存儲在AX內。

assume cs:code,ds:data data segment data endsstack segment stack endscode segment start:mov bl,16Hmov al,17Hmul bl ;ds:[00H]mov ax,4c00Hint 21H code ends end start

8位實例:

;8位乘法 assume cs:code,ds:data data segmentdb 03H,04Hdw 0FFH data endsstack segment stack endscode segment start:mov ax,datamov ds,axmov al,ds:[0]mov ah,ds:[1]mul ahmov ds:[2],axmov ax,4c00Hint 21H code ends end start

?

16位乘數時,被乘數在AX內,乘積在DX,AX內,遵循高存高,低存低原則。(DX存放高位,AX存放低位)

assume cs:code,ds:data data segment data endsstack segment stack endscode segment start:mov bx,0FFFFHmov aX,0FFFFHmul bxmov ax,4c00Hint 21H code ends end start

?

5. 除法指令

DIV

作用:除法運算。

格式:DIV (寄存器? |? 內存單元)

8位除數時,被除數在AX內,商在AL內,余數在AH內。

assume cs:code,ds:data data segment data endsstack segment stack endscode segment start:mov ax,4DHmov bl,0AHdiv blmov ax,4c00Hint 21H code ends end start

16位除數時,被除數在DX和AX內,商在AX內,余數在DX內。(DX存放高位,AX存放低位)

assume cs:code,ds:data data segment data endsstack segment stack endscode segment start:mov dx,000FHmov ax,0001Hmov bx,03E8Hdiv bxmov ax,4c00Hint 21H code ends end start

16位實例:

;16位除法 assume cs:code,ds:data data segmentdd 00015F99Hdw 0384H,0H,0Hdb 0FFH data endsstack segment stack endscode segment start:mov ax,datamov ds,axmov dx,ds:[2]mov ax,ds:[0]mov bx.ds:[4]div bx;div word ptrbx ds:[4]mov ds:[6],axmov ds:[8],dxmov ax,4c00Hint 21H code ends end start

?

6. jmp無條件跳轉指令(自己理解為go to語句,向前向后跳轉均可)

作用:無條件轉移指令,可以只修改IP,也可以同時修改CS和IP。

段內短轉移(移動范圍:-128~127)?? ?JMP SHORT 標號(占兩個字節)
段內近轉移(移動范圍:-32768~32767)?? ?JMP NEAR PTR 標號(占3個字節)

紅箭頭表示占字節幾位,也就是取值范圍大小。

實例:

assume cs:code,ds:data data segment data endsstack segment stack endscode segment start:mov ax,bxjmp short s0 ;取值范圍小;jmp near ptr s0 ;取值范圍大mov ax,bxmov ax,bxs0: mov bx,cxmov bx,cxmov bx,cxmov ax,4c00Hint 21H code ends end start

jmp指令段間轉移

作用:無條件轉移指令,可以只修改IP,也可以同時修改CS和IP。
段間遠轉移?? ?JMP FAR PTR 標號(占5個字節)

FAR PTR 指明了轉移指令用標號的段地址和偏移地址修改CS和IP。

assume cs:code,ds:data data segment data endsstack segment stack endsabc segment s1:mov bx,cxmov bx,cxmov bx,cx ends abccode segment start:mov ax,bxjmp far ptr s1 ;abc段中的s1s0:mov cx,dxmov cx,dxmov cx,dxmov ax,4c00Hint 21H code ends end start

jmp指令轉移地址

轉移地址可以在寄存器
JMP 寄存器(16位)(段內轉移)

assume cs:code,ds:data data segment data endsstack segment stack endscode segment start:mov ax,bxmov ax,offset s0jmp axmov bx,cxs0:mov cx,dxmov ax,4c00Hint 21H code ends end start

轉移地址可以在內存中(自己感覺像if語句的語法,通過判斷跳轉內存某內存位置)
JMP WORD PTR 內存單元地址(段內轉移)

assume cs:code,ds:data data segmentdw 0000H,0FFFFH data endsstack segment stack endscode segment start:mov ax.datamov ds,axmov ax,offset s0mov ds:[0],axjmp word ptr ds:[0]mov bx,cxs0:mov cx,dxmov ax,4c00Hint 21H code ends end start


JMP DWORD PTR 內存單元地址(段間轉移)(跳轉到段地址2233,偏移量為0011的位置)

assume cs:code,ds:data data segmentdw 0000H,0000H,0FFFFH data endsstack segment stack endsabc segmentmov ax,bxs0:mov ax,bxmov ax,bx ends abccode segment start:mov ax.datamov ds,axmov bx,abcmov ds:[0002H],bxmov bx,offset s0mov ds:[0],bxjmp dowrd ptr ds:[0]mov ax,4c00Hint 21H code ends end start

?

7. jcxz有條件跳轉指令(if語句,判斷cx寄存器是否為0)

作用:有條件轉移指令。段內短轉移,范圍為:-128~127。

格式:JCXZ 標號
解釋:如果CX寄存器的值為0,則轉移到標號處執行。

實例1:

assume cs:code,ds:data data segment data endsstack segment stack endscode segment start:mov ax,bxmov ax,bxmov cx,0Hjcxz s0mov ax,bxmov ax,bxs0:mov bx,cxmov ax,4c00Hint 21H code ends end start

實例2:

;判斷cx寄存器是否為0,不為0返回s0,否則執行s1,實現了loop循環功能 assume cs:code,ds:data,ss:stack data segmentdw 2H.2H,2H,0H,2H,2H data endsstack segment stack endscode segment start:mov ax,datamov ds,axmov bx,0s0: mov cx,ds:[bx]jcxz s1add bx,2Hjmp s0 s1:mov dx,bxmov ax,4c00Hint 21H code ends end start

?

8.?RET與RETF指令(跳轉)

RET指令

?? ?

? ? RET指令取棧中的數據,修改IP寄存器的內容,從而實現近轉移。

;取出棧60-2地址位數據1111(2個字節),將CS的IP指針賦值為1111,棧同時做了pop,SP指針恢復到60H. assume cs:code,ds:data,ss:stack data segment data endsstack segmentdw 256 dup [0H] stack endscode segment start:mov ax,stackmov ss,axmov sp,60Hmov ax,1111Hpush axret mov ax,4c00Hint 21H code ends end start

RETF指令

?? ?RETF指令取棧中的數據,修改CS和IP寄存器的內容,從而實現遠轉移。

;取出1122放入cs,3344放入ip,恢復至sp為60 assume cs:code,ds:data,ss:stack data segment data endsstack segmentdw 256 dup [0H] stack endscode segment start:mov ax,stackmov ss,axmov sp,60Hmov ax,1122Hmov bx,3344Hpush axpush bxretfmov ax,4c00Hint 21H code ends end start

?

9.?CALL指令(跳轉,形成子程序)

語法:CALL 標號(與ret配合使用形成子程序)
作用:將IP寄存器的值進棧,然后轉到標號處執行指令。

;一個簡單的子程序設計完成了 assume cs:code,ds:data,ss:stack data segment data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,stackmov ss,axmov sp,60Hmov ax,bxcall s0mov ax,bx ;將ax,bx地址放入ss的005e中,跳轉到s0mov ax,4c00Hint 21Hs0:mov bx,cxmov bx,cxret ;恢復,從而形成子程序 code ends end start

CALL指令與段間轉移

語法:CALL FAR PTR 標號(與retf配合使用形成子程序)
作用:將CS寄存器、IP寄存器進棧,然后轉到標號處執行指令。

assume cs:code,ds:data,ss:stack data segment data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,stcakmov ss,axmov sp,60Hmov ax,bxcall far ptr s0 ;先將cs值放入ss,再將ip值放入ss,ss中存放2個字mov ax,bxmov ax,bxs0:mov bx,cxmov bx,cxretfmov ax,4c00Hint 21H code ends end start

CALL指令與寄存器

作用:將IP寄存器的值進棧,然后轉到寄存器值的位置執行指令。

assume cs:code,ds:data,ss:stack data segment data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,stcakmov ss,axmov sp,60Hmov ax,bxmov cx,offset s0 ;將標號存放入寄存器,在call寄存器達到跳轉call cxmov ax,bxs0:mov bx,cxmov bx,cxretmov ax,4c00Hint 21H code ends end start

CALL指令與內存

語法:CALL WORD PTR 內存單元地址(ret配合使用)
作用:將IP寄存器的值進棧,然后轉到內存單元所存儲值的位置執行指令。

assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,datamov ds,axmov ax,stcakmov ss,axmov sp,60Hmov word ptr ds:[0H],offset s0 ;將s0放入數據段內存偏移地址中mov ax,bxcall word ptr ds:[0H] ;跳轉ds的偏移地址存儲的代碼mov ax,bxs0:mov bx,cxmov bx,cxretmov ax,4c00Hint 21H code ends end start

語法:CALL DWORD PTR 內存單元地址(retf配合使用)
作用:將CS寄存器、IP寄存器進棧,然后轉到內存單元所存儲值的位置執行指令。

assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,datamov ds,axmov ax,stcakmov ss,axmov sp,60Hmov word ptr ds:[0H],offset s0 ;將s0放入數據段內存偏移地址中mov word ptr ds:[2H],offset code ;放入代碼段cs值放入ds內存mov ax,bxcall dword ptr ds:[0H] ;跳轉ds的偏移地址存儲的代碼mov ax,bxs0:mov bx,cxmov bx,cxretfmov ax,4c00Hint 21H code ends end start

?

10.?ADC指令(區別ADD指令)

? ? ADC指令:帶進位加法指令。

?? ?作用:在計算加法的時候,一同帶上CF標志位上的進位值進行計算。

;1AFFFF + 2CFFFC = ? assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,1AHmov bx,0FFFFHmov cx,2CHmov dx,0FFFCHadd bx,dxadc ax,cxmov ax,4c00Hint 21H code ends end start

?

11.?SBB指令

? ? SBB指令:帶借位減法指令。

?? ?作用:在計算減法的時候,一同帶上CF標志位上的借位值進行計算。

?? ?ADC指令:帶進位加法指令。

?? ?作用:在計算加法的時候,一同帶上CF標志位上的進位值進行計算。

assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,0037Hmov bx,0000H ;00370000Hmov cx,0030Hmov dx,0001H ;00300001Hsub,bx,dxsbb,ax,cx ;注意先從低位數做減法,后做高位數減法.mov ax,4c00Hint 21H code ends end start

?

12.?CMP指令(比較指令,自己理解為if語句里做等號不等號判斷)

? ? CMP指令:比較指令。

?? ?作用:計算減法功能,但并不保存結果,僅僅根據計算結果影響標志寄存器的位。

?? ?CMP指令比較對照(CMP A,B):
?? ?ZF=1?? ??? ?A=B(等于)
?? ?ZF=0?? ??? ?A!=B(不等于)
?? ?CF=1?? ??? ?A<B(小于)
?? ?CF=0?? ??? ?A>=B(大于或等于)
?? ?CF=0并且ZF=0?? ?A>B(大于)
?? ?CF=1或者ZF=1?? ?A<=B(小于或等于)


13. 條件轉移指令(if條件轉移)

? ? 條件轉移指令:根據條件是否滿足,來決定是否修改IP。

?? ?條件轉移指令對照(CMP A,B):
?? ?ZF=1?? ??? ?A=B(等于)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?JE
?? ?ZF=0?? ??? ?A!=B(不等于)? ? ? ? ? ? ? ? ? ? ? ? ? JNE
?? ?CF=1?? ??? ?A<B(小于)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? JB
?? ?CF=0?? ??? ?A>=B(大于或等于)? ? ? ? ? ? ? ? ?JNB?? ?
?? ?CF=0并且ZF=0?? ?A>B(大于)? ? ? ? ? ? ? ? ? JA
?? ?CF=1或者ZF=1?? ?A<=B(小于或等于)? ? ?JNA

assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,0011Hmov bx,0011Hcmp ax,bxje s ;舉例ZF=1 A=B JEmov ax,bxmov ax,bxs:mov bx,cxmov bx,cxmov ax,4c00Hint 21H code ends end start

?

14. movsb、movsw(串傳送指令)

? ? movsb指令(1個字節
?? ?功能:將ds:si指向的內存單元中的字節傳送入es:di指向的內存單元,然后根據DF標志位的值,將si、di遞增1或遞減1。

?? ?movsw指令(2個字節
?? ?功能:將ds:si指向的內存單元中的字傳送入es:di指向的內存單元,然后根據DF標志位的值,將si、di遞增2或遞減2。

?

15. rep指令 (重復前綴指令,一種循環的方式)

? ? REP 重復前綴指令
?? ?作用:根據CX的值,重復執行后面的串傳送指令。

;從前向后依次復制粘貼,遞增 assume cs:code,ds:data,ss:stack data segmentdb 'china os'db 8 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,datamov ds,axmov si,0Hmov es,axmov di,8Hcld ;設置DF值為0mov cx,8H ;循環8次rep movsb ;重復cx的次數; movsb ;依次將ds寄存器數據偏移賦值到8-16,標志位遞增,0賦值8 ; movsb ;1賦值9 ; movsb ;2賦值A ; movsb ; movsb ; movsb ; movsb ; movsbmov ax,4c00Hint 21H code ends end start

?

16. INT 指令(強制觸發中斷,結束中斷 int 21H)

? ? 作用:觸發中斷過程。
?? ?語法:INT 中斷類型碼

assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,1000Hint 0 ;除法溢出中斷mov ax,4c00Hint 21H code ends end start

?

17.?與比較(and)

實例:

test al,al? ? ? ? ? ?

?

18. 取ebx補碼

實例:

neg? ebx? ? ??

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的十四、汇编指令(存储、加法、减法、乘法、除法、跳转、子程序、if判断、中断)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av在线视屏 | 黑人操日本女人 | 91麻豆产精品久久久久久夏晴子 | 亚洲国产日韩精品 | 久久久久久久一区二区 | 天天射日日操 | 97伊人| 国产一区不卡 | 久草资源在线观看 | 男人的天堂在线播放 | 免费视频二区 | 欧美偷拍综合 | 免费黄色美女网站 | 黄色欧美在线观看 | 日韩视频免费在线播放 | www午夜 | 国产精品一区二区三区免费视频 | 欧日韩在线 | 国产一级18片视频 | 操人视频在线观看 | 久久久久久久麻豆 | 波多野结衣电车痴汉 | 精品欧美乱码久久久久久1区2区 | 精品国产一区二区三区无码 | 日本不卡网站 | 国产二级毛片 | 超碰在线免费播放 | 国产精品久久一区二区三区 | 亚洲一区二区三区视频 | 秋霞影院午夜老牛影院 | 精品国产18久久久久久二百 | 黄色国产精品 | 超碰97在线播放 | 日韩大尺度视频 | 在线午夜av | 女同av网站 | 午夜黄色大片 | 久久久wwww | 日韩av高清在线播放 | 少妇一级1淫片 | 欧美一级片免费观看 | 中国xxxx性xxxx产国 | 精品少妇人妻AV无码专区在线 | 国产高清在线视频 | 丰满人妻一区二区三区46 | 久久一级电影 | 久久婷婷国产 | 在线亚洲精品 | av电影免费在线播放 | 欧美伦理一区 | 成人3d动漫在线观看 | 国产一二三区精品 | 91污在线观看| 少妇一区二区视频 | wwwxxxx在线观看| 亚洲女优视频 | 蜜臀av午夜精品 | 亚洲天堂2015| 日韩免费av在线 | 婷婷狠狠操 | 久久免费视频3 | 一区二区视频在线观看 | 国产人成一区二区三区影院 | 亚洲午夜福利在线观看 | 毛片入口 | av在线看片 | h片网站在线观看 | 污片免费看 | 国产真人做爰毛片视频直播 | 中文字幕在线视频第一页 | 久久免费看少妇高潮 | 亚洲av日韩av不卡在线观看 | 91丨九色丨蝌蚪丨对白 | av久色| 激情午夜av| 在线看麻豆 | 97超碰碰碰 | 中文字幕人妻无码系列第三区 | 噜噜狠狠狠狠综合久久 | 91视频免费视频 | 欧美老肥婆性猛交视频 | www.国产精品视频 | 欧美男同又粗又长又大 | a色视频| 日本三级黄在线观看 | 亚洲激情国产 | 情欲超 | 色姑娘av| 男人天堂导航 | 国产一级黄 | 国产网站av | 国产无套视频 | 日批视屏 | se日韩| 黑巨茎大战欧美白妞 | 午夜三级在线 | 都市激情自拍偷拍 | 青青青草视频 | 久久综合综合 |