彙編練習題:包含多個段的程序

一、有下面的一組學生成績數據,編程序求出Tomy同學的總分,最後結果存放在AX中(更強功能還可以繼續期待哦!)

nam ‘Tomy’ ‘John’ ‘Mary’ ‘Jone’
c 78 82 75 92
asm 66 79 95 87
math 78 93 74 100
chinese 90 78 56 63

請在下面程序基礎上完成功能:
要求在程序中必要處要寫上註釋。寫程序前,可以畫規範的流程圖以整理思路。

assume cs:code,ds:data
data segment
    nam db 'Tomy', 'John', 'Mary', 'Jone'
    c dw 78, 82, 75, 92
    asm dw 66, 79, 95, 87
    math dw 78, 93, 74, 100
    chinese dw 90, 78, 56, 63
data ends
code segment
start:
      mov ax,data
      mov ds,ax


      mov ax,4c00h
      int 21h
code ends
end start

提示:Tomy同學的總分是138H。

參考解答

二、 計算
在這裏插入圖片描述
其中
在這裏插入圖片描述

在這裏插入圖片描述
是兩組數據,其中的所有數均爲80以內的正數。
要求在程序中必要處要寫上註釋。寫程序前,可以畫規範的流程圖以整理思路。

提示:
編程解決問題是一項有創造性的工作,學編程就是塑造創造力的過程。本題目可以設置不同的數據存儲方案,決定了不同的編程方案。
下面羅列幾種,供同學們選用:
(1)將、兩組數據存放在固定的內存位置,如2000H:0H處——謹慎使用這種方案,除非特殊情況(在需要使用這種方案的場合,這種方法往往也是最精妙的)。
(2)在程序中指定兩個段存放X和Y,如爲data1段中存放X向量的8個數據,data2段中存放Y向量的8個數據。計算結果可以存儲在代碼段的起始字單元中,也可以設計方案存放於另外定義的專門段中,或者前面定義的任一段中。在程序中,data1當數據段,data2當附加段即可。
下面的代碼可以作爲參考(當然可以改動)。

assume cs:code,ds:data1
data1 segment       ;此段存放X
  db 12,16,18,12,4,7,8,16  
data1 ends
data2 segment       ;此段存放Y
  db 3,11,7,9,15,17,7,1    
data2 ends
code segment
     dw 0      ;此處存放求和結果,這是可能方案中的一種
start:
      //代碼開始


      mov ax,4c00h
      int 21h
code ends
end start

(2)在一個數據段中存入所有的數據。在訪問時,其段地址均在DS中,用兩個寄存器分別指標xi和yi的偏移地址(BX常用於表示偏移地址,還可以用BP、SI、DI寄存器)。計算結果也可以存儲在X和Y之後。
下面的代碼可以作爲參考(當然可以改動)。

assume cs:code,ds:data
data segment
  db 12,16,18,12,4,7,8,16  ;X
  db 3,11,7,9,15,17,7,1    ;Y
  dw 0       ;此處存放求和結果
data ends
code segment    
start:



      mov ax,4c00h
      int 21h
code ends
end start

參考解答

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章