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:若有不明白的地方,可以追問 念憶 對計算機而言,移動即是複製。移動一個檔案到其它地方,也是先複製過去,再把原檔案刪除。mov ds,ax 將ax中的資料賦值給ds,ax中的值不會消失。mov ax,data這句,如果是前面有assume ds data的情況,是將地址值傳給ax。由於彙編指令系統龐大,因而需構建指令系統體系,其... 海獅 一樓的第一句是正確 cpu要找的資料就在命令中,是指令的一部分,比如mov al,0fh下面的措辭不當 它與 一起存於 段,這樣的資料稱為立即數,或者直接運算元。應當改為 立即數本身是 的一部分,在 段中可以找到。立即數的限制很多,而且速度很慢,不是很推薦。例如 mov ax,0 往往寫成 x... 常用的型別對照如下 彙編 c語言 佔位元組數 db char 1 dw short int 2 dd int 或float 4 dq long int 或 double 8 組合語言的基本資料型別有哪些?與高階程式 如c 的資料型別的對應關係是什麼?請通俗解釋,謝謝 因為組合語言直接面向硬體進行操作...組合語言中mov ds,ax移動的是ax中的資料還是隻是它的複製
怎麼理解彙編中的立即數,組合語言中 立即數 究竟是個什麼東東,時而可以代表
組合語言中的基本資料型別與高階語言程式設計中的資料型別的對應關係是什麼