【微機原理與匯編語言】循環程序設計

一、實驗目的

1.熟練掌握8086/8088常用匯編指令的使用方法

2.熟練掌握循環結構程序編程技巧

3.熟練掌握匯編語言程序運行調試方法

二、實驗要求

認真分析實驗題目,設計程序流程圖,獨立完成代碼編寫及運行調試。

三、實驗題目

給出不大于255的十個正整數,分別計算出其中偶數和奇數的平均值,并以十進制的方式輸出,保留到小數點后兩位。

四、程序流程圖

略。

五、程序代碼

sseg segment stack
stp	db 100 dup(0)
sseg ends
dseg segment
dta	db 12,14,12,14,12,16,57,21,25,11
dtb	db 0;偶數計數器
dtc	db 0;奇數計數器
jishu	db 0,0
oushu	db 0,0
num	db ?
flag	db 1
dseg ends
cseg segment
assume cs:cseg,ds:dseg
assume ss:sseg
print macro add al,30hmov dl,almov ah,02hint 21h
endm
huanhang macromov al,0ahmov dl,almov ah,02hint 21h
endm
shijinzhi macro
local a,b,cmov num,al;判斷是否大于100cmp num,100jc a;num<100,cf =1,跳amov ah,0mov al,nummov bl,100div bl;al為商,ah為余數mov num,ahprintmov flag,0
a:	;判斷是否大于10cmp num,10jc bmov ah,0mov al,nummov bl,10div bl;al為商,ah為余數mov num,ahprintmov flag,1
b:	cmp flag,1;flag的作用是防止余數小于10jnc cmov al,0print
c:	mov al,numprint
endm
panduan procmov dl,2ehmov ah,02hint 21hmov al,nummov ah,0cmp ah,aljc notzeroprintret
notzero:	mov al,nummov num,100mul num;存在ax中div blshijinzhiret
panduan endp
start:	mov ax,dsegmov ds,axmov ax,ssegmov ss,axmov sp,size stpmov cx,10mov si,0
again:	mov al,[si]shr al,1;cf = 1奇,cf = 0偶jc dmov bl,[si]add oushu,bladc byte ptr oushu+1,0inc dtbjmp e
d:	mov bl,[si]add jishu,bladc byte ptr jishu+1,0inc dtc
e:	inc siloop againmov ah,oushu+1mov al,oushudiv dtb;al中存平均值,ah存余數mov oushu,almov oushu+1,ahmov ah,jishu+1mov al,jishudiv dtc;mov jishu,almov jishu+1,ah;按十進制輸出mov al,oushushijinzhimov al,oushu+1mov num,almov bl,dtbcall panduanhuanhangmov al,jishushijinzhimov al,jishu+1mov num,almov bl,dtccall panduanmov ah,4chint 21h
cseg ends
end start

運行截圖:

六、實驗總結

本次實驗中,我對循環結構程序又有了更新一層認識,對匯編指令的使用規則及方法掌握的更熟練了。在本次實驗中,我同時也遇到了一些困難:

  1. 在最后的幾次調試時,發現小數位是不對的,且只有一位數。經過調試發現是我直接將余數打印了出來,并沒有處理成小數。要想將余數轉化成小數,將余數乘以10的倍數再除以除數即可。
  2. 在寫宏定義時,也想運用循環結構,不知是否可行。在老師的幫助下,發覺需要在頭部聲明:local?x,x,x。原因是當宏在主程序中被二次展開時,標號會重名,所以要提前聲明一下防止出錯。
  3. 在寫程序的過程中也犯了一些基礎的錯誤,如不能直接div?數值,需將數值放在寄存器中;adc?oushu+1,0是不行的,需要指明數值類型是字還是字節,應修改為:adc?byte ptr oushu+1,0;以及mov?存儲器,存儲器這種低級的錯誤。

經過這段時間的訓練,一點點地編寫代碼與調試,對于匯編語言有了更高一層的理解與掌握,也認識到了它身為低級語言的重要性,希望我在未來的學習中能更加深刻的學習與掌握相關知識,搭建好人與機器溝通的橋梁。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/22860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/22860.shtml
英文地址,請注明出處:http://en.pswp.cn/web/22860.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖片裁剪與上傳處理方案 —— 基于阿里云 OSS 處理用戶資料

目錄 01: 通用組件&#xff1a;input 構建方案分析 02: 通用組件&#xff1a;input 構建方案 03: 構建用戶資料基礎樣式 04: 用戶基本資料修改方案 05: 處理不保存時的同步問題 06: 頭像修改方案流程分析 07: 通用組件&#xff1a;Dialog 構建方案分析 08: 通用組件&…

計算機組成原理·考點知識點整理

根據往年考試題&#xff0c;對考點和知識點的一個整理。 校驗編碼 碼距 一種編碼的最小碼距&#xff0c;其實就是指這種編碼的碼距。碼距有兩種定義&#xff1a; 碼距所描述的對象含義 2 2 2 個特定的碼其二進制表示中不同位的個數一種編碼這種編碼中任意 2 2 2 個合法編碼的…

【linux進程控制(三)】進程程序替換--如何自己實現一個bash解釋器?

&#x1f493;博主CSDN主頁:杭電碼農-NEO&#x1f493; ? ?專欄分類:Linux從入門到精通? ? &#x1f69a;代碼倉庫:NEO的學習日記&#x1f69a; ? &#x1f339;關注我&#x1faf5;帶你學更多操作系統知識 ? &#x1f51d;&#x1f51d; 進程程序替換 1. 前言2. exec…

【JMeter接口自動化】第8講 Fiddler抓包Jmeter

1&#xff09;配置好Fiddler 設置Fiddler-Tools-Options-HTTPS 設置Fiddler-Tools-Options-Connections&#xff0c;設置端口為8888 2&#xff09;查看IP 在CMD中輸入ipconfig 查看IP地址 3&#xff09;配置Jmeter Http請求——基本&#xff0c;設置Http請求&#xff0c;使用…

輕量管理內核復雜級別的項目

在嵌入式開發中&#xff0c;管理大型項目&#xff08;例如Linux內核&#xff09;往往是一個復雜的過程。常規的版本控制系統如Git在處理小型項目時非常高效&#xff0c;但面對龐大的代碼庫時可能會顯得笨重且占用大量存儲空間。本文將介紹幾種輕量級的方法來管理內核級別的項目…

Python 快速入門

1. 語言基礎 1.1 數據類型與變量 Python 是一門動態類型語言&#xff0c;這意味著你不需要顯式聲明變量的類型。Python 解釋器會根據你賦予變量的值自動推斷其類型。這使得 Python 代碼簡潔易懂&#xff0c;但同時也需要注意一些潛在的問題。 1.1.1 Python 數據類型概述 Py…

408鏈表的創建和初始化

首先第一個頭文件&#xff0c;定義結構體類型 typedef struct LNode {int data;struct LNode* next; }LNode,*LinkList; //可能作為第一次寫c語言的小伙伴看不懂這一段typedef是如何定義的 //基本的解釋如下所示 //typedef struct LNode LNode; //typedef struct LNode* LinkL…

apex代碼發送郵件時進行抄送

在 Salesforce 中使用 Apex 代碼發送電子郵件時&#xff0c;可以通過 ccAddresses 屬性來添加抄送&#xff08;CC&#xff09;收件人。以下是一個示例代碼&#xff0c;展示了如何使用 Messaging.SingleEmailMessage 類來發送帶有抄送的電子郵件。 示例代碼 public class Emai…

北航數據結構與程序設計第四次作業選填題復習

首先都是線性的&#xff0c;線性包括順序和鏈式&#xff0c;棧和隊都可以用兩種方式實現。棧只能存于棧頂取于棧頂&#xff0c;隊列先進先出&#xff0c;因此存取點是固定的。 函數棧幀創建原理 畫圖即可。 A.顯然不行&#xff0c;5如果第一個出來說明5是最后一個進的&#xf…

Lambda表達式與函數式工具在Python中的應用詳解

目錄 一、引言 二、Lambda表達式 Lambda表達式的定義 Lambda表達式的使用場景 Lambda表達式的示例 三、函數式工具 map()函數 filter()函數 reduce()函數 itertools模塊 functools模塊 四、Lambda表達式與函數式工具的結合使用 五、Lambda表達式與函數式工具的注意…

C語言面試題(拓展)

1、字符串中獲取最長無重復字符子串。 要在字符串中找到最長的無重復字符的子串&#xff0c;可以使用滑動窗口技術。滑動窗口通過兩個指針來表示當前窗口的起始和結束位置&#xff0c;并且維護一個哈希表來記錄字符及其最后出現的位置&#xff0c;以此來確保字符不重復。 以下…

【云嵐家政】-day00-開發環境配置

文章目錄 1 開發工具版本2 IDEA環境配置2.1 編碼配置2.2 自動導包設置2.3 提示忽略大小寫2.4 設置 Java 編譯級別 3 Maven環境3.1 安裝Maven3.2 配置倉庫3.3 IDEA中配置maven 4 配置虛擬機4.1 導入虛擬機4.2 問題 5 配置數據庫環境5.1 啟動mysql容器5.2 使用MySQL客戶端連接數據…

Java Socket 網絡編程實例(阻塞IO、非阻塞IO、多路復用Selector、AIO)

文章目錄 1. 概述2. TCP 阻塞式IO 網絡編程實例2.1 TCP網絡編程服務端2.2 ByteBufferUtil2.3 客戶端代碼2.4 運行截圖 3. TCP 非阻塞式IO 網絡編程實例3.1 服務端3.2 客戶端3.3 運行截圖 4. 多路復用4.1 服務器端4.2 客戶端4.3 運行截圖 5. AIO5.1 AIO 服務端5.2 客戶端5.3 運行…

C++筆試強訓day39

目錄 1.神奇的字母&#xff08;二&#xff09; 2.字符編碼 3.最少的完全平方數 1.神奇的字母&#xff08;二&#xff09; 鏈接https://ac.nowcoder.com/acm/problem/205832 看輸出描述即可知輸出次數最多的那個字母即可。 哈希表直接秒了&#xff1a; #include <iostre…

一維時間序列突變檢測方法(小波等,MATLAB R2021B)

信號的突變點檢測問題是指在生產實踐中&#xff0c;反映各種系統工作狀態的信號&#xff0c;可能因為受到不同類型的噪聲或外界干擾而發生了信號突變&#xff0c;導致嚴重失真的信號出現&#xff0c;因此必須探測突變出現的起點和終點。研究目的在于設計出檢測方案&#xff0c;…

CPU內部結構窺探·「2」

從一條匯編加法指令出發&#xff0c;分析cpu內部發生了什么&#xff1f; 本文將詳細剖析ARMv8架構中加法指令的執行過程&#xff0c;深入理解其在CPU上的運行機制。 ARMv8匯編基礎 在ARMv8匯編語言中&#xff0c;加法指令ADD的基本格式如下&#xff1a; ADD destination, s…

【python】python租房數據分析可視化(源碼+數據+報告)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

在Go語言中如何使用變量

1. 變量 Go 中的變量是標識符。例如&#xff0c;我們可能需要存儲客戶的電子郵件地址&#xff0c;但還需要確保它是有效的。這種情況下&#xff0c;可以創建一個名為 email 的變量來存儲電子郵件的值。電子郵件地址可以分配給 email 變量。 變量引用一個內存地址&#xff0c;賦…

OpenCV學習(4.3) 圖像閾值

1.目的 在本教程中&#xff1a; 你會學到簡單閾值法&#xff0c;自適應閾值法&#xff0c;以及 Otsu 閾值法(俗稱大津法)等。你會學到如下函數&#xff1a;**cv.threshold&#xff0c;cv.adaptiveThreshold** 等。 2.簡單閾值法 此方法是直截了當的。如果像素值大于閾值&am…

word2016版本中同時顯示多個頁面

為了方便查看word內容&#xff0c;我們會將多個頁面同時顯示。 對于2016版&#xff0c;操作方法如下&#xff1a; 視圖 ---》多頁