1. 程式人生 > 其它 >組合語言(第3版,王爽著):實驗6 實踐課程中的程式

組合語言(第3版,王爽著):實驗6 實踐課程中的程式

(1)將課程中所有講解過的程式上機除錯,用 Debug 跟蹤其執行過程,並在過程中進一步理解所講內容。

(略)

(2)程式設計,完成問題 7.9 中的程式。

  • 完成的程式如下:
assume cs:codesg, ds:datasg, ss:stacksg

stacksg segment
    dw 0, 0, 0, 0, 0, 0, 0, 0
stacksg ends

datasg segment
    db '1. display      '
    db '2. brows        '
    db '3. replace      '
    db '4. modify       '
datasg ends

codesg segment
start:  mov ax, stacksg
        mov ss, ax
        mov sp, 10H

        mov ax, datasg
        mov ds, ax

        mov bx, 0           ; 每一個數組(即每一行的地址)
        mov cx, 4           ; cx 設定外層迴圈的次數 -- 資料段 中有 4 行字元(即 4 個數組)
    s:  push cx             ; 將外層迴圈 cx 中的值暫存到 棧 中
        mov si, 0           ; 每一行中元素的下標,相當於陣列的下標
        mov cx, 4           ; cx 設定內層迴圈的次數

    s0: mov al, [bx+3+si]
        and al, 11011111B   ; 將 al 中的 ASCII 碼的第 5 位置為 0,小寫字母變為大寫字母
        mov [bx+3+si], al   ; 將轉變後的 ASCII 碼寫回原單元
        inc si              ; si 加 1,指向下一個字母
        loop s0             ; 內層迴圈的 loop 指令將 cx 中的計數值減 1

        add bx, 10H         ; 將 bx 指向下一個陣列
        pop cx              ; 從棧頂彈出原 cx 的值,恢復 cx
        loop s              ; 外層迴圈的 loop 指令將 cx 中的計數值減 1

        mov ax, 4c00H
        int 21h
codesg ends

end start
  • 除錯過程: