1. 程式人生 > >彙編程式:求最大數

彙編程式:求最大數

【任務】求最大數
  在BUFFER處給出了多個無符號數,請找出其中的最大值,放至MAX指定的儲存單元中。

data  segment
  buffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902, 14255
         dw 40623, 47645, 15575, 51572, 18110, 26511, 14880, 5921, 31999
         dw 2893, 21056, 16574, 147, 25532, 33336, 5251, 64269, 31514, 23670
         dw 53335, 49581
, 57895, 25689, 51697, 58198, 27548, 54151, 41373 dw 44382, 23511, 39326, 56955, 51911 max dw ? data ends

  已知標號為BUFFER的陣列後直接就是標號為MAX的單元,陣列中元素的個數由程式計算,不得人工數。給定的資料中,最大者為64269(FB0DH)。

【參考解答】

assume cs:code,ds:data
data  segment
  buffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902
, 14255 dw 40623, 47645, 15575, 51572, 18110, 26511, 14880, 5921, 31999 dw 2893, 21056, 16574, 147, 25532, 33336, 5251, 64269, 31514, 23670 dw 53335, 49581, 57895, 25689, 51697, 58198, 27548, 54151, 41373 dw 44382, 23511, 39326, 56955, 51911 max dw ? data ends code segment start: mov
ax, data mov ds, ax mov cx, offset max - offset buffer shr cx, 1 ;對字型資料,資料個數是單元數的一半 lea bx, buffer mov ax, [bx] ;先設第一個為最大 inc bx inc bx dec cx again: cmp ax, [bx] jae next mov ax, [bx] next: inc bx inc bx loop again mov max, ax mov ax, 4c00h int 21h code ends end start