彙編語言實驗2—彙編程式設計入門

来源:https://www.cnblogs.com/jayson2814/archive/2022/04/09/16121511.html
-Advertisement-
Play Games

恢復內容開始 DB\DW\DD說明: db定義位元組類型變數,一個位元組數據占1個位元組單元,讀完一個,偏移量加1; dw定義字類型變數,一個字數據占2個位元組單元,讀完一個,偏移量加2; dd一個雙字數據占4個位元組單元,讀完一個,偏移量加4。 彙編偽指令ORG n作用是定義程式或數據塊的起始地址,指示此語 ...


------------恢復內容開始------------

DB\DW\DD說明:

db定義位元組類型變數,一個位元組數據占1個位元組單元,讀完一個,偏移量加1;

dw定義字類型變數,一個字數據占2個位元組單元,讀完一個,偏移量加2;

dd一個雙字數據占4個位元組單元,讀完一個,偏移量加4。

彙編偽指令ORG n作用是定義程式或數據塊的起始地址,指示此語句後面的程式或數據塊以n為起始地址連續存放在程式存儲器中。

 

(1) 對於下麵的數據定義,各條MOV指令單獨執行後,有關寄存器的內容是什麼?

1 運算符使用說明

運算符

使用說明

SEG

返回變數/標號的段值

OFFSET

取變數/標號的偏移地址

TYPE

返回變數類型:位元組=1,字=2,雙字=4;

取標號類型:NEAR= -1,FAR= -2

LENGTH

返回變數的元素個數

返回外層DUP數值,其他為1

SIZE

返回變數的位元組數

SIZE=TYPE*LENGTH

 

FLDB     DB ?

TABLEA  DW 20 DUP(?)

TABLEB  DB ‘ABCD’

1) MOV AX, TYPE FLDB

2) MOV AX, TYPE TABLEA

3) MOV CX, LENGTH TABLEA

4) MOV DX, SIZE TABLEA

5) MOV CX, LENGTH TABLEB

結果

 

彙編指令

調試所得寄存器值

(1)

MOV AX,TYPE FLDB

(AX) = 0001H

(2)

MOV AX, TYPE TABLEA

(AX) = 0002H

(3)

MOV CX, LENGTH TABLEA

(CX) = 0014H

(4)

MOV DX, SIZE TABLEA

(DX) = 0028H

(5)

MOV CX, LENGTH TABLEB

(CX) = 0001H

實驗源文件,代碼如下

 1  ;定義數據段(放變數)------------------
 2       DATA SEGMENT  ;定義CNT=80H;CNT DB 10000000B
 3       MSG DB 'This is an example.$'
 4      ;1.
 5       FLDB DB ?
 6       TABLEA DW 20 DUP(?)
 7       TABLEB DB 'ABCD'
 8     
 9 
10       DATA ENDS
11 
12       ;代碼段------------------
13       CODE SEGMENT 
14       ASSUME CS:CODE,DS:DATA
15 
16 
17       ;代碼段首條指令偏移地址0100H    
18       ORG 0100H
19   
20 START:MOV AX,DATA         ;數據段段地址送AX(不能刪)
21       MOV DS,AX           ;數據段段地址存入數據段寄存器DS(不能刪)
22 
23      ;從下麵開始編輯自己的代碼(Start)
24      ;1.
25       MOV AX,TYPE FLDB
26       MOV AX,TYPE TABLEA
27       MOV CX,LENGTH TABLEA
28       MOV DX,SIZE TABLEA
29       MOV CX,LENGTH TABLEB
30     CODE ENDS
31       END START

 

 我的理解是第一個T獲得數據段的地址,依次執行T指令完成各個MOV指令

ARY DB 

0,0,3,4 是定義一個叫ary的char型的數組變數,它有4個成員,{0,0,3,4}

用C語言理解的話,就是 char ary[4] = {0,0,3,4};

CNT:操作次數

LEN EQU $-ARRAY

$代表當前地址

$ - ARRAY 代表當前地址與Label之間的距離, 單位byte

整體意思就是將這個差距保存到LEN中 

(2) 先自己手工計算,再藉助程式調試驗證,這裡EQU是等值命令。

已知:

ORG 100H

ARY DW 3, 4, 5, 6

CNT EQU $-ARY

     DB 7, 8, CNT, 9

則執行指令“MOV AX, ARY+2”和“MOV BX, ARY+10”後,AX=?, BX=?

與你手工計算結果一致否?

結果

(AX) =0004H

(BX) =0908H

實驗源文件,代碼如下

 1  ;定義數據段(放變數)------------------
 2       DATA SEGMENT  ;定義CNT=80H;CNT DB 10000000B
 3       MSG DB 'This is an example.$'
 4      ;2.
 5       ORG 100H
 6       ARY DW 3, 4, 5, 6
 7       CNT EQU $-ARY
 8       DB 7, 8, CNT, 9
 9 
10       DATA ENDS
11 
12       ;代碼段------------------
13       CODE SEGMENT 
14       ASSUME CS:CODE,DS:DATA
15 
16 
17       ;代碼段首條指令偏移地址0100H    
18       ORG 0100H
19   
20 START:MOV AX,DATA         ;數據段段地址送AX(不能刪)
21       MOV DS,AX           ;數據段段地址存入數據段寄存器DS(不能刪)
22 
23      ;從下麵開始編輯自己的代碼(Start)
24      ;2.
25       MOV AX, ARY+2
26       MOV BX, ARY+10  
27       END START

 

思路圖解

 ENTRY ; 指定應用程式的入口點

(3) 先手工計算,再藉助程式調試驗證。

根據下麵的指令和偽指令序列:

TAB   DW 1, 2, 3, 4, 5, 6

ENTRY EQU 6

       MOV BX, OFFSET TAB

       ADD BX, ENTRY

       MOV AX, [BX]

結果

記錄1(AX) =    0004H   

實驗源文件,代碼如下

 1  ;定義數據段(放變數)------------------
 2       DATA SEGMENT  ;定義CNT=80H;CNT DB 10000000B
 3       MSG DB 'This is an example.$'
 4      ;2.
 5       ORG 100H
 6       TAB   DW 1, 2, 3, 4, 5, 6
 7       ENTRY EQU 6
 8       
 9 
10       DATA ENDS
11 
12       ;代碼段------------------
13       CODE SEGMENT 
14       ASSUME CS:CODE,DS:DATA
15 
16 
17       ;代碼段首條指令偏移地址0100H    
18       ORG 0100H
19   
20 START:MOV AX,DATA         ;數據段段地址送AX(不能刪)
21       MOV DS,AX           ;數據段段地址存入數據段寄存器DS(不能刪)
22 
23      ;從下麵開始編輯自己的代碼(Start)
24      ;3.
25       MOV BX, OFFSET TAB
26       ADD BX, ENTRY  
27       MOV AX, [BX]
28 END START

 

思路圖解 

(4) 閱讀以下示常式序並答題:

 

請嘗試修改以上程式,實現如下所述功能:

1) 在‘Welcome to Masm!’前添加自己的“姓名全拼+學號”顯示,如:SunZhiHai209050111 Welcome to Masm!;

2) 顯示共4行,前3行與示常式序效果相同,第4行要求效果:紅字高亮藍底閃爍。

 

 

實驗源文件,代碼如下 

1	 ;定義堆棧段------------------
2	  STACK SEGMENT STACK      
3	  DB 200 DUP(0)
4	  STACK ENDS  
5	;代碼段------------------
6                 ASSUME CS:CODE, DS:DATA
7                 CODE SEGMENT 
8	;定義數據段(放變數)------------------
9	  DATA SEGMENT
10	  DB 'SunJie219350128 Welcome to Masm!'
11                 DATA ENDS
12
13 START:       MOV AX, DATA         ;數據段段地址送AX(不能刪)
14	  MOV DS, AX              ;數據段段地址存入數據段寄存器DS(不能刪)
15
16	  ;從下麵開始編輯自己的代碼(Start)
17
18	  MOV AX, 0B872H
19	  MOV ES, AX
20
21	  MOV SI, 0
22	  MOV DI, 0
23	  MOV CX, 31     ;字元數
24 A:	
25	   MOV AL, DS:[SI]
26       	   MOV ES:[DI], AL
27       	   MOV ES:[DI+160], AL  ;一行有160位元組
28       	   MOV ES:[DI+320], AL
29       	   MOV ES:[DI+480], AL
30                  
31	   MOV AL, 2H		;設置前景和背景顏色 綠字黑底 00000010
32	   MOV ES:[DI+1], AL
33	   MOV AL, 24H		;設置前景和背景顏色 紅字綠底 00100100
34	   MOV ES:[DI+161], AL
35	   MOV AL, 71H		;設置前景和背景顏色 藍字白底 01110001
36	   MOV ES:[DI+321], AL
37	   MOV AL, 9CH		;設置前景和背景顏色 紅字高亮藍底閃爍 10011100
38	   MOV ES:[DI+481], AL
39
40	   INC DI
41	   INC DI
42	   INC SI	
43	
44	LOOP A
45
46	  ;顯示字元串
47	  MOV AH, 4CH
48	  INT 21H
49        CODE ENDS	
50          END START

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java基礎常見知識&面試題總結(下) 泛型 Java 泛型瞭解麽?什麼是類型擦除?介紹一下常用的通配符? Java 泛型(generics) 是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程式員在編譯時檢測到非法的類型。泛型的本質是參數化類型,也就是說所操作的數 ...
  • 前言 工作的時候,尤其是自媒體工作者,必備水印添加工具以保護知識產權,網上有許多的線上/下載的水印添加工具,但他們或多或 少都存在以下問題: 線上工具需要將圖片上傳到對方伺服器,信息不安全。 很多工具不具備批量處理功能。 很多工具自定義的功能太少,如水印透明度,字體等。 操作繁瑣。 現在只要你會使用 ...
  • 模塊 首先定義下模塊的概念,在C++中可以認為每個二進位文件為一個模塊。比如一個exe可執行程式、一個dll或so動態庫。通常來說一個exe會依賴於幾個dll動態庫。 我們寫一個帶界面的聊天程式,exe為入口主程式 是主模塊,它可能依賴於QtWidgets QtCore等Qt模塊、libevent第 ...
  • 前言 今天給大家分享一個Python入門基礎知識吧,周末就給大家放鬆一下了,大家好才是真的好。 1 tuple.count(value) 描述:返回value出現的次數 Python學習交流Q群:906715085#### >>> tp = tuple([1, 2, 3, 4, 4, 5]) >>> ...
  • 前言 在使用框架日常開發中需要在controller中進行一些非同步操作減少請求時間,但是發現在使用@Anysc註解後會出現Request對象無法獲取的情況,本文就此情況給出完整的解決方案 原因分析 @Anysc註解會開啟一個新的線程,主線程的Request和子線程是不共用的,所以獲取為null 在使 ...
  • 前言 鼓搗了一陣子的微信機器人今天終於運行成功了,可以選擇在每天的5點20分為你的女朋友發送當日的天氣,每日一句還有日曆,如果你有多個女朋友的話,還可以創建一個列表,之後迴圈遍歷列表為你的多個女朋友發送你的關懷,讓你更好的做好時間管理。 設置好你需要關懷的人的微信名,微信掃碼登錄,剩下的交給程式就可 ...
  • 前言 上班就想摸魚,一直上班那是不可能的,總要放鬆一下,摸摸魚啥的吧。繼打游戲、看視頻等摸魚行為被監控後,現在打工人離 職的傾向也會被監控。 有網友爆料稱知乎正在低調裁員,視頻相關部門幾乎要裁掉一半。而在知乎裁員的討論區,有網友表示企業安裝了行為感知系 統,該系統可以提前獲知員工跳槽念頭。 而知乎在 ...
  • 前言: 請各大網友尊重本人原創知識分享,謹記本人博客:南國以南i 概要: 通過 Docker Compose 在使用Docker容器構建的隔離環境中輕鬆運行 WordPress。在開始之前,請確保已安裝Compose 。 上篇我們介紹到 docker容器編排原來這麼絲滑~ 環境檢查 可以通過如下命令 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...