回覆列表
  • 1 # 使用者588138990950

    預設的時間中斷是每秒產生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:如果要求非常精確,那就要直接對定時器進行程式設計,透過埠操作來實現。

  • 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

    ----

  • 中秋節和大豐收的關聯?
  • ATM網路技術的發展和應用是什麼?