組合語言(第3版,王爽著):實驗6 實踐課程中的程式
阿新 • • 發佈:2022-05-26
(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
- 除錯過程: