-
1 # 使用者588138990950
-
2 # 使用者8201481786170
1、程式如下:
code segment
assume cs:code, ds:code, ss:code
org 100h
main: mov si,offset x ;取陣列中第一個元素的記憶體地址
mov cx,100 ;陣列元素個數
cld ;以下使用lodsb來獲得各元素值,為此先清除方向標誌
xor ah,ah ;因x內全部為無符號數,所以將ah設為0,以便累加(根據 _fmlyht 意見從迴圈內移出以提高程式碼效率)
lab1: lodsb ;從ds:si處取一個位元組放入al中,同時si增1即指向下個元素
add sum,ax ;累加
loop lab1 ;迴圈,前面對cx的賦值規定了迴圈次數為100次
int 20h ;迴圈結束後sum中為總和,此處用int 20h退出
x db 100 dup (?) ;定義100個位元組型元素的陣列,但不指定初值
sum dw 0 ;sum的初值為0,在程式程式碼部分中沒有對該變數進行初始化,所以會使用這裡定義的值為總和的初值
code ends
end main
2、程式碼如下:
cmp ax,bx ;比較ax與bx
jge lab2 ;若ax>=bx則轉至lab2,帶符號數比較須使用jg(e)/jl(e)/jng/jnl等指令
xchg ax,bx ;根據 _fmlyht 意見,將ax與bx交換,如此,ax中為兩者的較大值,bx為較小值
lab2: cmp ax,cx ;執行到此時,ax中有最初時ax與bx中較大者,這時再比較ax與cx
jge lab3 ;方法與前次類似,至lab3時ax將存有原來三者中最大的數
xchg ax,cx ;沒有跳轉的話需將cx中較大的值與ax中較小的值交換以使ax中含最大值
lab3:
;至此ax中已是三者中的最大值,下面程式碼是為完成中間值與最小值的排序,使三者從大到小分別存放於ax、bx、cx。原題無此要求,可去掉。
cmp bx,cx
jge lab4
xchg bx,cx
lab4:
;至此,ax>=bx>=cx
----
回覆列表
預設的時間中斷是每秒產生18.2次,如果要求不精確,就用18次時鐘中斷來延時一秒。地址0:46c存放的就是這個計數器,可以讀取這個,然後加上18,比較就可以實現。程式碼如下:mov ax,0mov ds,axmov si,46chlodswadd ax,18mov cx,axloc_1:mov si,46chlodswcmp ax,cxjnb loc_2jmp loc_1loc_2:如果要求非常精確,那就要直接對定時器進行程式設計,透過埠操作來實現。