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。影響...