DOS彙編練習 7 無符號數排序及有符號數排序

2021-10-12 12:30:59 字數 2291 閱讀 3582

三個數排序,可用三個變數之間相互比較,按大小要求排序。

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...