組合語言程式設計題求高手

時間 2021-09-14 19:02:54

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

;print

thestring

length

movah,9

int21h

xordx,dx

movdl,count

call

print_num

leadx,answ1

;print

thenumber's

count

movah,9

int21h

xordx,dx

movdl,count1

call

print_num

leadx,answ2

;print

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