三個數排序,可用三個變數之間相互比較,按大小要求排序。
c語言偽**:
if
(a>b)
/*如果a大於b,借助中間變數t實現a與b值的互換*/
if(a>c)
/*如果a大於c,借助中間變景t實現a與c值的互換*/
if(b>c)
/*如果b大於c,借助中間變數t實現b與c值的互換*/
例1: 程式設計將(ax)=2387、(bx)=192fh、(cx)=9256中的無符號數按由大到小的順序排序,上機程式設計除錯出程式,並將排序結果記錄在下面。
無符號數排序,可以用cmp指令比較大小後,jb或jc指令跳轉至交換實現:
code segment
assume cs:code
start:
mov ax,2387;注意這裡題目要求不是16進製制
mov bx,192fh
mov cx,9256
cmp ax,bx ;相當於相減指令,不返回結果
jc ch1 ;若(ax)
<
(cx),則相減後產生借位,跳轉至交換部分
next1:
cmp ax,cx
jc ch2
next2:
cmp bx,cx
jc ch3
jmp exit
ch1:
xchg ax,bx
jmp next1
ch2:
xchg ax,cx
jmp next2
ch3:
xchg bx,cx
exit:
mov ah,4ch
int 21h
code ends
end start
通過多次單步執行後觀察暫存器值變化,可得出:
(ax)=2428>(bx)=192fh>(cx)=0953,已自動轉換為16進製制,
即從大到小排序:(ax)=9256d == 2428h > (bx)=192fh > (cx)=2387 == 0953h。
若改為從小到大排序,只需將jb或jc命令換為ja命令。
若為有符號數排序,則使用jle或jge命令實現:
例2: 程式設計將(ax)=9387h、(bx)=192fh、(cx)=9256h中的無符號數按由小到大的順序排序,上機程式設計除錯出程式,並將排序結果記錄在下面。
code segment
assume cs:code
start:
mov ax,
9387h;注意這裡題目要求不是16進製制
mov bx,
192fh
mov cx,
9256h
cmp ax,bx ;相當於相減指令,不返回結果
jge ch1 ;若(ax)
>
(cx),則跳轉至交換部分
next1:
cmp ax,cx
jge ch2
next2:
cmp bx,cx
jge ch3
jmp exit
ch1:
xchg ax,bx
jmp next1
ch2:
xchg ax,cx
jmp next2
ch3:
xchg bx,cx
exit:
mov ah,
4ch int 21h
code ends
end start
debug執行後可看到結果:
已知:9256h
補碼:1110110110101010 (第一位為符號位)
十進位制:-28074
9387h
補碼:1110110010111001(第一位為符號位)
十進位制:-27833
故轉換正確,若改為從大到小排序,只需將jge改為jle。
Dos彙編練習 5 debug指令篇
一.t p g命令的不同之處 1.t命令作用 執行匯程式設計序,單步跟蹤。2.p命令作用 執行匯程式設計序,單步跟蹤。與t命令不同的是 p命令不會跟蹤進入子程式或軟中斷。p命令的使用方式與t命令的使用方式完全相同。3.g命令作用 執行彙編指令 常用作設定斷點除錯用。g命令的使用方法是 g 起始位址 ...
反彙編練習2017 0123
看到乙個cm,拿來玩玩.是乙個keygenme,delphi寫的.逆了使用者名稱的hash演算法,後續演算法用到了delphi庫函式,暫時對不上功能,先練習到這,以後有時間再搞.用delphi寫的程式,如果不用到delphi庫函式,還是挺好還原的.include stdafx.h include i...
movsw 彙編 彙編練習題
16.下面指令執行後,總是使cf of 0的是 a.and b.neg c.not d.inc 17.為使cx 1時,執行 jz minus 轉至標號minus而編制了一指令,其中錯誤的是 a.inc cx b.sub cx,offffh c.and cx,offffh d.xor cx,offff...