1樓:湯旺河邊
1.編寫一個程式實現:在buf開始的儲存區中存放30個帶符號數,試統計其正數、負數和零的個數,並將統計的個數分別放到plus、negative、zero單元中。
; 本程式通過編譯,執行正確
code segment
assume cs:code,ds:code
buf db 23,-69,0,35,46,0,57,68,0,79,81,98,-43,251,21,15,-69,0,58,159,-27,-89,65,76,85,123,0,253,193,121
elements equ ($-buf)/type buf ;元素個數
plus db 0 ;正數計數
negative db 0 ;負數計數
zero db 0 ;零計數
start: push cs
pop ds
push cs
pop es ;使資料段、附加段與**段同段
cldlea si,buf ;取資料地址
mov cx,elements ;元素個數
statics: cmp byte ptr [si],0 ;是否0?
jnz $+8 ;不是
inc zero ;是,0計數
jmp next_one
test byte ptr [si],80h ;是否正數?
jnz $+8 ;不是
inc plus ;是,正數計數
jmp $+6
inc negative ;負數計數
next_one:inc si ;si增1,判斷下一個元素
loop statics
exit_proc: mov ah,4ch ;結束程式
int 21h
code ends
end start ;編譯到此結束
2.若記憶體buf開始的單元中存放10個無序的有符號數,試用冒泡法將它們升序排列。
; 冒泡法排序
code segment
assume cs:code,ds:code
; -----------------------------------------
; 定義常量
yes equ 1
no equ 0
on equ 1
off equ 0
; -----------------------------------------
; 定義結構型別
bubb_para struc ; 氣泡排序法參數列
carry db no ; 是否帶符號。yes:有符號數;no:無符號數
sort db no ; 升序/降序。yes:升序;no:降序
yes_no db 73h,76h,7dh,7eh
load db 0ach,0adh
comp db 3ah,3bh
exchange db 86h,87h
store db 0aah,0abh
bubb_para ends
; -----------------------------------------
; 功能:按要求對陣列元素排序,能夠對位元組元素、字元素進行無符號數、有符號數的升序、降序排序。
; 子程式原型:對位元組元素進行無符號升序排序。
bubbling proc near
push ax
push bx
push cx
push si
push di
; ------------------根據排序引數,修改排序指令
lea si,parameters
lea di,@@compare
mov al,type buf
dec al
push ax
lea bx,[si.load]
xlat
mov [di][2],al
pop ax
push ax
lea bx,[si.comp]
xlat
mov [di][3],al
pop ax
push ax
lea bx,[si.exchange]
xlat
mov [di][7],al
pop ax
lea bx,[si.store]
xlat
mov [di][9],al
mov al,[si.carry]
shl al,1
or al,[si.sort]
xor ah,ah
lea bx,[si.yes_no]
xlat
mov [di][5],al
; ------------------按要求排序
mov cx,elements ;外迴圈次數
@@scanning: push cx ;入棧儲存外迴圈次數
lea si,buf ;陣列首地址裝入源變址暫存器
@@compare: push si
pop di ;當前陣列元素地址賦給目的變址暫存器,以備交換之用
lodsb ;將當前陣列元素讀入累加器
cmp al,[si] ;當前陣列元素與相鄰的下一個陣列元素相比較
jbe @@nextone ;若小於或等於,不作資料交換,處理下一個陣列元素
xchg al,[si] ;若大於,交換陣列元素
stosb ;儲存數值較小者
@@nextone: loop @@compare ;處理下一個陣列元素
pop cx ;外迴圈次數出棧
loop @@scanning ;下一趟比較
; ------------------
pop di
pop si
pop cx
pop bx
pop ax
retbubbling endp
buf db -112,56,72,98,32,251,97,63,123,21 ;需要排序的資料
elements equ ($-buf)/type buf-1 ; 外迴圈次數
parameters bubb_para
start: push cs
pop ds
push cs
pop es ;使資料段、附加段與**段同段
call bubbling ;對buf中的元素按無符號數、升序排序
exit_proc: mov ah,4ch ;結束程式
int 21h
code ends
end start ;編譯到此結束
2樓:謬衣肇慧英
1.ax=1f3fh,bx=0204h,cx=1d3bh2.al=30(或者1eh),bl=10(或者0ah)3.count=8
(我懷疑a1的定義裡面是不是多了一個「,」。如果去掉那個逗號,則count=7)
表示a1中資料的個數
4.cf=1,sf=0,zf=1,of=0
3樓:水蘊邛霞月
stack
segment
stack
db200
dup(0)
stack
ends
data
segment
str1
db80db0
db80
dup(0)
db'$'
str2
db81
dup(0)
inputdb0
countdb0
count0db0
count1db0
count2db0
ask1
db0ah,0dh,"please
input
astring:
$"answ0
db0ah,0dh,"string
length:
$"answ1
db0ah,0dh,"number:$"
answ2
db0ah,0dh,"wode:$"
answ3
db0ah,0dh,"arranged
string:
$"result1
db0ah,0dh,"password
right!$"
result2
db0ah,0dh,"password
error!$"
message
db0ah,0dh,"press
anykey
tocontinue!$"
data
ends
code
segment
assume
es:data,ds:data
assume
ss:stack,cs:code
start:
movax,data
movds,ax
moves,ax
leadx,ask1
movah,9
int21h
leadx,str1
;count
thenumber
andthe
word
movah,10
int21h
movbl,str1+1
movcount,bl
leadi,str1
call
count_num
leadx,answ0
thestring
length
movah,9
int21h
xordx,dx
movdl,count
call
print_num
leadx,answ1
thenumber's
count
movah,9
int21h
xordx,dx
movdl,count1
call
print_num
leadx,answ2
theword's
count
movah,9
int21h
xordx,dx
movdl,count2
call
print_num
leadi,str1+2
call
trun_set
;take
outthe''
leadx,answ3
movah,9
int21h
leadi,str1+2
call
print_string
leadx,ask1
;input
theword
andchange
to'*',but
can't
delmov
ah,9
int21h
leadi,str2
call
input_pass
xorcx,cx
;compare
twostring
movcl,count
inccx
cmpcl,count0
jnenext0
leasi,str1+2
leadi,str2
cldrepz
cmpsb
jnenext0
leadx,result1
movah,9
int21h
jmpexit
next0:
leadx,result2
movah,9
int21h
exit:
leadx,message
movah,9
int21h
movah,8
int21h
movah,4ch
int21h
;all
thefunction.
input_pass
proc
loop0:
movah,8
int21h
cmpal,0dh
jeexit0
movbyte
ptr[di],al
incdi
inccount0
movdl,2ah
movah,2
int21h
jmploop0
exit0:
movbyte
ptr[di],'$'
retinput_pass
endp
count_num
proc
incdi
loop1:
incdi
movah,byte
ptr[di]
cmpah,0dh
jeexit1
cmpah,30h
jbnext1
cmpah,39h
janext1
inccount1
jmploop1
next1:
cmpah,41h
jbloop1
cmpah,5ah
janext2
inccount2
jmploop1
next2:
cmpah,61h
jbloop1
cmpah,7ah
jaloop1
inccount2
jmploop1
exit1:
retcount_num
endp
print_num
proc
movax,dx
movcl,0ah
divcl
xordx,dx
movdl,al
addah,30h
xorbx,bx
movbl,ah
push
bxcmp
al,0
jeexit2
call
print_num
exit2:
popax
movdl,al
movah,2
int21h
retprint_num
endp
trun_set
proc
movbx,0
loop2:
cmpbl,count
jaenext5
cmpbyte
ptr[di+bx],''je
next3
incbx
jmploop2
next3:
movcx,bx
loop3:
cmpbl,count
jbnext4
movbx,cx
deccount
jmploop2
next4:
moval,byte
ptr[di+bx+1]
movbyte
ptr[di+bx],al
incbx
jmploop3
next5:
moval,byte
ptr[di+bx]
cmpal,'
'jne
exit3
decbx
jmpnext5
exit3:
movbyte
ptr[di+bx],'$'
movcount,bl
deccount
rettrun_set
endp
print_string
proc
xorbx,bx
movbl,count
loop4:
cmpbl,0
jeexit4
movdl,byte
ptr[di+bx]
movah,2
int21h
decbx
jmploop4
exit4:
movdl,byte
ptr[di+bx]
movah,2
int21h
retprint_string
endp
code
ends
endstart
組合語言程式設計,組合語言程式設計
org 0000h ljmp main org 000bh ljmp t0int org 0030h main mov tmod,01h mov th0,high 65536 5000 mov tl0,low 65536 5000 setb tr0 setb et0 setb ea clr a sj...
組合語言程式設計微控制器 跪求高手
程式如下 mov r0,20h mov dptr,4000h mov r2,16 loop mov a,r0 movx dptr,a inc r0 inc dptr djnz r2,loop sjmp end mov r7,16 需要移動數的個數 mov r0,20h 20h開始地址 mov dpt...
組合語言程式設計問題編寫組合語言程式。能每隔10秒顯示數字分別為
org 0000h 數碼管共陰 ajmp main org 000bh t0ms equ not 50000 100 ms 晶振 6.000 mhz pjsbz equ 20h pjsbzy equ 21h pst0 mov tl0,low t0ms t0 中斷 mov th0,high t0ms ...