鉴于存储在外部存储器中的4个数字,其中一些数字带有符号。进行排序,首先是负数,然后是正数。按升序排列。在外部存储器中按顺序存储它们。
程序是按升序编写的,但结果是负数跟随正数。
汇编程序8051(mcs-51)
代码:
mov DPTR, #00h ;Initial address of data pointer.
mov A, #35d
movx @DPTR, A ;Moves a value from accumulator into DPTR.
inc DPTR ;The increment of address pointer.
mov A, #-12d
movx @DPTR, A
inc DPTR
mov A, #-23d
movx @DPTR, A
inc DPTR
mov A, #15d
movx @DPTR, A
;Sorting of data will be in internal memory, after finishing, soting data will be removing to external memory again.
sort: ;Start a loop of sorting by sort.
mov R0,#28h ;Stores address of value in proccess on DATA(28h...22h).
lp1:
mov 4Ah, #00h ;Stores a largest number.
mov R2, DPL ;Stores a values from DPL to remember the address of largest element.
jmp search ;Jump to search.
rt1:
mov DPL, R2 ;Sets DPTR a lower byte to R2 (DPTR now is equal R2)
mov A, #00h
dec DPL ;The decrement of DPL.
movx @DPTR, A
mov @R0, 4Ah
dec R0
cjne R0, #24h, lp1 ;Compare, and if not equals, jump to lp1.
jmp data_to_xdata
search:
mov DPTR, #00h
lp2:
movx A, @DPTR
inc DPTR
mov R1, DPL ;R1 as a local loop counter.
cjne A, 4Ah, lp3
rt2:
cjne R1, #0Ah, lp2
jmp rt1
lp3:
jc rt2 ;Jump to rt2 if carry set equals 1.
mov 4Ah, A
mov R2, DPL
jmp rt2
;Sorting fihished, so data are removing to external memory.
xdata:
mov DPTR, #00h
mov R0,#22h
lp4:
mov A, @R0
movx @DPTR, A
inc DPTR
inc R0
cjne R0, #4Ah, lp4
end
答案 0 :(得分:2)
如果使用无符号比较,则症状与签名比较时的症状完全一致。
我对8051已经30多年了,但据我所知,所有的比较都是管理数据索引。如果其中一个是数据比较,则可以是从无符号更改为已签名的数据。