1. 程式人生 > >組合語言計算2^12儲存在AX暫存器,並以十進位制形式輸出

組合語言計算2^12儲存在AX暫存器,並以十進位制形式輸出

一、計算2^12儲存在AX中(王爽組合語言第二版p100):

		mov  	cx,12		;迴圈12次
		mov     ax,1		;初始化AX
s:		add		ax,ax
		loop  	s			;執行完loop後,要顯示的數字2^12 已經在暫存器AX

二、AX暫存器以顯示說明:

本例中,2^12=4096,故AX=1000H

則輸出字元為4096

原理:
ax為十六位暫存器,所以輸出十進位制數範圍為0 - 65535,最大五位數,故設定CX=5,LOOP語句實現演算法:
4096/10000= 商0  餘數4096    ; 根據十進位制書寫習慣,不輸出前面的0字元 ,需要在輸出迴圈裡判斷


4096/1000= 商4  餘數96         ;輸出4
96/100= 商0  餘數96              ;輸出0
96/10=  商9  餘數6                 ;輸出9
6/1=  商6  餘數0                     ;輸出6

把每次所得商加上48即可得到相應數字的ASCII碼,

三、完整程式碼:


code segment
assume cs:code,ds:data,ss:stack
start:
        mov     ax,data
        mov     ds,ax
		
	mov  	cx,12		;迴圈12次
	mov     ax,1		;初始化AX
s:	add		ax,ax
	loop  	s			;執行完loop後,要顯示的數字2^12 已經在暫存器AX

        mov     si, offset divisors
        mov     di, offset results                     
        mov     cx,5   
aa:
        mov     dx,0            
        div     word ptr [si]   ;除法指令的被除數是隱含運算元,此處為dx:ax,商ax,餘數dx
        add     al,48           ;商加上48即可得到相應數字的ASCII碼
        mov     byte ptr [di],al        
        inc     di                                
        add     si,2                           
        mov     ax,dx                        
        loop    aa
        mov     cx,4    
        mov     di, offset results 
bb:
        cmp     byte ptr [di],'0'   ;不輸出前面的0字元    
        jne     print
        inc     di                           
        loop    bb
print:
        mov     dx,di                       
        mov     ah,9
        int     21h                   
        mov     ax,4C00h       
        int     21h
code ends
data    segment
divisors        DW 10000, 1000, 100, 10, 1
results          DB 0,0,0,0,0,"$"        ;存放五位數ASCII碼
data ends
stack segment STACK
stack ends
end start

四、DOSBOX執行截圖(dosbox已安裝masm611,並真確設定環境變數)

相關推薦

組合語言計算2^12儲存在AX十進位制形式輸出

一、計算2^12儲存在AX中(王爽組合語言第二版p100): mov cx,12 ;迴圈12次 mov

組合語言——彙編的8種定址方式以及2個預設段

1.立即定址方式 MOV AH, 80H(直接給暫存器賦值)2. 暫存器定址方式(源或者目的有一個是暫存器) 2.1) 源運算元是暫存器定址方式 如:ADD VARD, EAX  ADD VARW, AX   MOV VARB, BH等。 其中:VARD、VARW和VARB是雙字,字和位元組

組合語言:將主程式中BX內的二進位制數用十六進位制數的形式在螢幕上顯示出來。

上機程式碼:   code segment       assume cs:code   start:       mov bx,1234H  

計算機儲存結構分析(記憶體快取硬碟)

前言            一個計算機包含多種儲存器比如:暫存器、快取記憶體、記憶體、硬碟、光碟等,為啥有這麼多種儲存方式,對於不太瞭解的人,總是覺得雲裡霧裡的,搞不明白原因。        

《ServerSuperIO Designer IDE使用教程》-3.Modbus協議讀取多個實現多種資料型別解析。釋出:v4.2.2版本

更新內容,v4.2.2版本:1.增加Modbus協議讀取多個暫存器,並且按多種資料型別解析資料。2.Modbus Serial和Modbus TCP兩個驅動合併成一個驅動。3.修改資料庫結構,儲存配置資訊。4.優化ServerSuperIO核心程式碼,應用過程中的潛在問題。 v4.2.2 下載地址:官方

[組合語言]立即數定址和定址

1. 什麼是立即數? 運算元從指令程式碼中得到,即立即數(Immediate),也可以說就是指令的一部分了, 例如: MOV EAX 33221100H ;機器程式碼為 B8 00 11 22 33 ;操作碼為 B8 ;立即數為 33221100 操作

彙編的8種定址方式以及2個預設段

16位CPU所含有的暫存器有(見圖2.1中16位暫存器部分): 4個數據暫存器(AX、BX、CX和DX) 2個變址和指標暫存器(SI和DI) 2個指標暫存器(SP和BP) ,32位CPU增加2個16位的段暫存器:FS和GS。 4個段暫存器(ES、CS、SS和DS) 1個指令

linux-AT&T彙編把32位的值16進位制字串打印出來

將暫存器的值以16進位制顯示,程式如下:.section .bbs .lcomm buf,10 #定義一個10位元組長度的記憶體區,用來儲存計算出來的字元 .section .text .globl _start _start: //初始化暫存器 movl $0x01abc

C語言訪問MCU有兩種方式可以採用!

微控制器的特殊功能暫存器SFR是SRAM地址已經確定的SRAM單元,在C語言環境下對其訪問歸納起

虛擬機器:直譯器樹遍歷直譯器基於棧與基於大雜燴

解析器是parser,而直譯器是interpreter。兩者不是同一樣東西,不應該混用。  前者是編譯器/直譯器的重要組成部分,也可以用在IDE之類的地方;其主要作用是進行語法分析,提取出句子的結構。廣義來說輸入一般是程式的原始碼,輸出一般是語法樹(syntax tree,也叫parse tree等)或抽

C51微控制器中斷定時PWM原理配置及使用

大家晚上好,我分享的內容大體是先介紹中斷,各暫存器使用(可能這裡有點囉嗦),然後就簡單寫一下定時器,然後PWM原理,以及它的配置和使用。大概今晚就這樣了,如果有什麼錯的,或有什麼疑問,請大家馬上提出來,一起進步。 中斷:當計算機執行正常程式時,系統中出現某些急需處理的異常

一口氣看完45個CPU核心技術大揭祕

序言 前段時間,我連續寫了十來篇CPU底層系列技術故事文章,有不少讀者私信我讓我寫一下CPU的暫存器。 暫存器這個太多太複雜,不適合寫故事,拖了很久,總算是寫完了,這篇文章就來詳細聊聊x86/x64架構的CPU中那些紛繁複雜的暫存器們。 長文預警,時速較快,請繫好安全帶~起飛~    

組合語言入門教程(2)----

目錄 文章目錄 目錄 摘要 1.通用暫存器 2.幾條彙編指令 3.實體地址的方法 4.CS和IP 摘要 本節主要記錄自己學習組合語言的過程。主要參考組合語言這本教材。

組合語言_第2

第2章 暫存器 一個典型的CPU 由運算器、控制器、暫存器 等器件構成,這些器件靠內部匯流排相連。在CPU中: 運算器進行資訊處理; 暫存器進行資訊儲存; 控制器控制各種期間進行工作; 內部匯流排連線各種器件,在它們之間進行資料的傳送; 2.1 通用暫存器

組合語言第三章(記憶體訪問)

3.1  在CPU中,用一個16位暫存器來儲存一個字,一個字兩個位元組,高8位存放高位位元組,低8位存放低位位元組,低位元組所在的記憶體單元稱為起始地址。 3.2 3.3 8086CPU中,通常用DS暫存器來存放要訪問資料的段地址(字或者位元組) 舉個例子: mov bx,1000H mov

第5章 用機器計算

第5章 用暫存器機器計算 我的目標是展示出 heavenly天使 機器 不是 divine, live being生靈 的一種, 而是 clockwork 鐘錶匠(他認為時鐘具有製作者賦與其的對工作的榮耀感的靈性) 的一種, 在一種最簡單的和材料的力量的範圍內  引起了幾乎所有的 多種

5.2 一個機器的模擬器

5.2  一個暫存器機器的模擬器 為了很好的理解暫存器機器,我們必須測試 我們設計的機器能否 按預期執行程式。 測試一個設計的一個方法是手工模擬控制器的操作,如在5.5中的練習題。 如果不是針對於最簡單的機器,這就是極其麻煩的。 在這部分中,我們用暫存器機器 語言為機器構造了一個模擬器

【CPU微架構設計】分散式多埠(4寫2讀)堆設計

  暫存器堆(Register File)是微處理的關鍵部件之一。暫存器堆往往具有多個讀寫埠,其中寫埠往往與多個處理單元相對應。傳統的方法是使用集中式暫存器堆,即一個集中式暫存器堆匹配N個處理單元。隨著埠數量的增加,集中式暫存器堆的功耗、面積、時序均會呈冪增長,進而可能降低處理器總體效能。   下圖所示為傳

組合語言第3章 (記憶體訪問)

*****本章學習***** 3.1 字資料在記憶體中的儲存 (1)字單元,即存放一個字型資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成 (2)高地址記憶體單元中存放字型資料的高位位元組,低地址記憶體單元中存放字型資料的低位位元組 ps:這個知識點讓我想起了暫存器當中的高8位位元組和低8位

實現BX的內容加上123 把和送到AX

① 一條指令 1 LEA AX,[BX+123] ②兩條指令 1 ADD BX,123 2 MOV AX,BX   Tips: LEA指令與MOV指令的區別: ① MOV指令是 資料        傳送指令-------傳送