組合語言求無符號位元組序列中的最大值和最小值

時間 2021-08-30 10:54:02

1樓:吳勇一家人

stack1 segment stack

dw 64 dup(?)

stack1 ends

code segment

assume cs:code

start: mov si,3000h

mov cx,0008h

call branch

int 03h

branch: jcxz a4

push si

push cx

push bx

mov bh,[si]

mov bl,bh

a1: lodsb

cmp al,bh

jbe a2

mov bh,al

jmp a3

a2: cmp al,bl

jae a3

mov bl,al

a3: loop a1

mov ax,bx

pop bx

pop cx

pop si

a4: ret

code ends

end start

2樓:匿名使用者

參考思路如下:

首先對若個數按從小到大排序,然後第一個元素就是最小的,最後一個元素就是最大的 ;

參考**如下:

data segment

mes1 db 'the max:$'

mes2 db 'the min:$'

a dw 42,20,100,456,99,120,89,12334,90,1239

data ends

code segment

main proc far

assume cs:code,ds:datastart:

push ds

sub ax,ax

push ax

mov ax,data

mov ds,ax

;以下是起泡排序核心**

mov cx,10

dec cx

loop1:

mov di,cx

mov bx,0

loop2:

mov ax,a[bx]

cmp a[bx+2],ax

jge cotinue

xchg ax,a[bx+2]

mov a[bx],ax

cotinue:

add bx,2

loop loop2

mov cx,di

loop loop1

mov dx,offset mes1

mov ah,09h

int 21h

call crlf

mov bx,a[18]

call bini ;轉換為十進位制的子程式call crlf ;回車換行子程式

mov dx,offset mes2

mov ah,09h

int 21h

call crlf

mov bx,a[0]

call bini

retmain endp

bini proc near

mov cx,10000d

call bin

mov cx,1000d

call bin

mov cx,100d

call bin

mov cx,10d

call bin

mov cx,1d

call bin

retbini endp

bin proc near

mov ax,bx

mov dx,0

div cx

mov bx,dx

mov dl,al

add dl,30h

mov ah,02h

int 21h

retbin endp

crlf proc near

mov dl,0ah

mov ah,02h

int 21h

mov dl,0dh

mov ah,02h

int 21

retcrlf endp

code ends

end start

3樓:匿名使用者

datas segment

s db '1234567890'

s1 db 'max: '

max db 0,'$'

s2 db 'min: '

min db 0,'$'

datas ends

codes segment

assume cs:codes,ds:datas

start:

mov ax,datas

mov ds,ax

mov si,offset s ;初始化si,cx

mov cx,9 ;cx為定義的個數減一

mov bh,[si] ;第一個字元放入bh,bl

mov bl,bh

ss1: ;開始比較

inc si

mov al,[si]

cmp al,bh

jb ss2

mov bh,al ;al>bh 寫入bh

jmp ss3

ss2:

cmp al,bl

ja ss3

mov bl,al ;al

ss3:

loop ss1

mov max,bh ;寫入最大值

mov min,bl ;寫入最小值

mov dx,offset s1 ;顯示最大值

mov ah,9

int 21h

mov dl,' ' ;顯示空格

mov ah,2

int 21h

mov dx,offset s2 ;顯示最小值

mov ah,9

int 21h

mov ah,0 ;等待鍵盤輸入

int 16h

mov ah,4ch

int 21h

codes ends

end start

4樓:做而論道

;從鍵盤接收任意字元。

assume cs:code, ds:data

data segment

msg1 db 'please input some chars: $'

msg2 db 13, 10, 'the biggest char is: <'

big db ' ', '>'

db 13, 10, 'the smallest char is: <'

min db 127, '>$'

nnn db 0

data ends

code segment

start:

mov ax, data

mov ds, ax

;------------------------------

mov dx, offset msg1

mov ah, 9

int 21h

m_loop:

mov ah, 1

int 21h

cmp al, 13

je disp

inc nnn

cmp al, ds:[big]

jb next

mov ds:[big], al

next:

cmp al, ds:[min]

jnb m_loop

mov ds:[min], al

jmp m_loop

disp:

cmp nnn, 0 ;輸入 0 個嗎 ?

je exit ;是則退出,不予顯示

mov dx, offset msg2

mov ah, 9

int 21h

;------------------------------

exit:

mov ah, 4ch

int 21h

code ends

end start

本程式執行後,顯示如下:

please input some chars: 1357924680

the biggest char is: <9>

the smallest char is: <0>

本程式,沒有使用 bh、bl,而是使用了儲存器變數 big、min。

效果是相同的。

因為,bh 等8位的暫存器,僅僅有八個,經常不夠用。

儲存器變數,則可以定義 65535 個。

這樣,程式就更有通用性。

微機組合語言三道小題,求高手解答

5樓:匿名使用者

1.assume cs:code, ds:data

data segment

buf1 db 12,45,98,7,5,-3,6,-2,9,4,4,5,8,4,21,2,45,12,5,4,3,5,75,2,1,5,7,-1

data ends

code segment

start:

mov ax, data

mov ds, ax

mov es,ax

lea di, buf1

mov cx, 65535

mov al,-1

cldrepne scasb ;但al-(di) == 0, 即al = (di)是跳出迴圈, 或者cx=0時, 跳出迴圈, 所以當(di)=-1時, 跳出迴圈

;如果(di)不等於-1,那麼cx-1,繼續迴圈。直到(di) = -1, 或cx = 0

mov ax, 65535

sub ax, cx ;現在cx的值是65535-字串的長度, 那麼65535-(65535-字串的長度) = 字串的長度

mov cx,ax

mov ax, 4c00h

int 21h

code ends

end start

2.assume cs:code

code segment

start:

xor byte ptr ds:[0500h], 11110000b ;0500h單元有一個數

;異或有一個特點,就是任何位與1異或,取反,與0異或,不變

;所以高4位置1取反, 低4位置0不變

mov ax, 4c00h

int 21h

code ends

end start

3.;編寫子程式。求記憶體中一無符號位元組型資料序列的最大值和最小值。

;該無符號位元組型資料序列的起始地址位於si中,

;資料個數位於cx中。要求求得的最大值存放於ah中,最小值存放於al中。主程式呼叫子程式實現上述功能。

assume cs:code, ds:data

data segment

num db 12,45,0,98,12,255,45,12,36,88,54,12,36 ;最大值為255(ff), 最小值為0(0)

count db $-num

data ends

code segment

start:

mov ax, data

mov ds,ax

mov cl, count ;資料個數位於cx中

mov si, offset num ;該無符號位元組型資料序列的起始地址位於si中

mov al, [si]; ;假設最小值現在在al中

mov ah, al; ;假設最大值現在在al中

inc si

lp: cmp al, [si]

jb done ;如果al小於[di]的話,那麼al還是最小值, 不需要改變

mov al, [si] ;否則[di]中就是最小值,那麼將他賦值給al

done: cmp ah, [si]

ja done1 ;如果ah大於[di], 那麼不需要改變, 還是最大值

mov ah,[si] ;否則[di]中就是最大值,那麼將他賦值給al

done1: inc si

loop lp

mov ax,4c00h

int 21h

code ends

end start

源**檔案中的**是排好版的

ps:若有不明白的地方,可以追問

用組合語言設計程式,求無符號數中的最大值。並將最大值存入變數MAX中

生活如歌 原始檔來自 彙編子程式庫 注釋來自 25 標號 mms功能 求單位元組十六進製制有符號資料塊的極值入口條件 資料塊的首址在dptr中,資料個數在r7中。出口資訊 最大值在r6中,位址在r2r3中 最小值在r7中,位址在r4r5中。影響資源 psw a b r1 r7 堆疊需求 4位元組mm...

組合語言是如何區分有符號運算和無符號運算的

宣告 8086機器語言裡只有加法運算。其他所有運算都是建立在加法之上。我們理解中的有符號數 無符號數 有符號數 無符號數 得到的結果是一樣的,這個結果同時影響著cf和of。如果我們把它看成有符號數,那麼對於8位暫存器,就把最高位看成符號位,具體數字取後七位,所以取值範圍是 128 127。超出了就改...

用組合語言編寫 求2位無符號數的最大值,最小值和平均值 的程式,急求答案!!哪位大神幫幫忙

原始檔的彙編子程式庫,注意到 的 http zhidao.baidu.com 問題 148383731.html 25 標籤 mms功能 單位元組的十六進製制符號資料塊的極值 入口條件 第乙個資料塊的位址在dptr,在r7資料。出口資訊 最大值在r6中,位址在r2r3最低r7位址r 4 r 5。影響...