匯編判斷閏年實習報告_第1頁
匯編判斷閏年實習報告_第2頁
匯編判斷閏年實習報告_第3頁
匯編判斷閏年實習報告_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、1 實驗題目編寫一個判斷閏年的匯編語言程序,判斷某個年份是否是閏年,如果是,輸出“yes!”;如果不是,則輸出“No!”。2 實驗目的1) 學習匯編基本程序結構(順序、分支、循環(huán))編程;2) 學習int 21h的01h,09h,0ah號功能;3) 學習如何用堆棧方法解決實際問題。3 實驗步驟1) 根據(jù)題意,程序啟動運行之后,用戶在鍵盤上輸入判斷的年份,輸出判斷的結果。所以,程序主要結構應如下:接收在鍵盤上輸入的年份字符串,存儲在緩沖區(qū)year;將緩沖區(qū)中的年份轉換成10進制數(shù)賦給變量yeard;判斷變量yeard是否滿足閏年的條件;輸出判斷的結果。2) 首先,定義數(shù)據(jù)段。數(shù)據(jù)段包括輸入判斷閏年

2、年份提示,判斷是否結束程序的提示,輸入字符串的緩沖區(qū)(其中定義了允許輸入的最大字節(jié)數(shù),實際輸入的個數(shù),實際字符串存儲的緩沖區(qū)大?。?,閏年和非閏年的判斷提示,緩沖區(qū)的偏移量,十進制形式存儲的變量yeard;3) 定義堆棧段,由于判斷閏年時會改變yeard的數(shù)值,所以定義200個字節(jié)的堆棧空間供程序使用;4) 接下來進入代碼段的實現(xiàn),從程序結構上看,用INT 21H的09號功能輸出輸入判斷閏年年份的提示,用INT 21H的10號功能輸入年份字符串,將字符串存儲在緩沖區(qū)year中;5) 定義最大輸入的字符個數(shù)為5(包括回車),用循環(huán)again1將year轉化為十進制數(shù)存入變量yeard中;a) 設置

3、最大循環(huán)次數(shù)為4,初始字符串偏移量i為2,年份變量yeard為0;b) 首先將ax寄存器置0,然后將year的首地址賦給si,再將si加上偏移量i用寄存器間接尋址方式將si存儲的字符賦給al;c) 將ax中存放的字符減去30h轉化為十進制數(shù)值,把該數(shù)值加到年份變量yeard中,然后bx清0,將實際輸入的個數(shù)存入bl中,將偏移量i與bx+1作比較(判斷是否讀到y(tǒng)ear的最后一個有效字符),是,跳出循環(huán)again1,否,繼續(xù)下一步;d) 將ax中的數(shù)值乘以10再賦給yeard,然后i自增1,回到b。6) 判斷yeard是否為閏年,是,輸出“yes!”,否則輸出“No!”;a) 將存有十進制形式的年

4、份ax的數(shù)值壓入棧中,然后與4進行整除運算,判斷其余數(shù)是否為0。是,則進行下一步;否,跳到e;b) 將棧中的數(shù)值出棧賦給寄存器ax,再ax的數(shù)值壓入棧中,然后與100進行整除運算,判斷其余數(shù)是否為0。是,則進行下一步;否,跳到d;c) 將棧中的數(shù)值出棧賦給寄存器ax,然后與100進行整除運算,判斷其余數(shù)是否為0。是,則進行下一步;否,跳到e;d) 輸出提示“yes!”;跳到步驟7;e) 輸出提示“No!”;7) 輸出提示“Continue?(n)”,若想結束程序則按N/n,否則按其他任意鍵。源程序代碼 data segmentoutput db Input the year :,$ judge

5、 db 13,10,Continue?(n),13,10,$year db 5 ;允許輸入的最大字節(jié)數(shù) db ? ;實際輸入的個數(shù) db 5 dup(?) ,$ ;實際字符串存儲的緩沖區(qū) judge1 db yes!,$ judge2 db no!,$ i dw ? ;緩沖區(qū)的偏移量 yeard dw 0 ;10進制數(shù)形式的年份 ent db 13,10,$data ends stack segmentdb 200 dup(0)stack endscode segment assume cs:code,ss:stack,ds:datastart: mov ax,data ;初始段寄存器 mov

6、 ds,axcontinue : lea dx,output ;在屏幕上輸出輸入提示 mov ah,09h int 21h lea dx,year ;從鍵盤輸入輸入年份字符串 mov ah,0ah int 21h lea dx,ent ;換行 mov ah,09h int 21h mov cx,4 ;設置最大循環(huán)次數(shù) mov i,2 ;取輸入年份緩沖區(qū)字符串的偏移量 mov yeard,0 ;年份置0again1: mov ax,0 lea si,year add si,i mov al,si sub ax,30h ;將字符轉化為10進制 add ax,yeard mov bx,0 mov b

7、l,year1 ;將實際輸入的個數(shù)賦給bl寄存器 add bx,1 ;計算出需要處理數(shù)據(jù)的次數(shù) cmp i,bx je over1 mov dx,0 mov bx,10 mul bx mov yeard,ax inc i loop again1over1: push ax ;將ax壓棧 mov dx,0 mov bx,4 ;將年份yeard與4整除 div bx cmp dx,0 jne notleap pop ax ;將ax出棧 push ax ;將ax壓棧 mov dx,0 mov bx,100 ;將年份yeard與100整除 div bx cmp dx,0 jne isleap pop

8、ax ;將ax出棧 mov dx,0 mov bx,400 ;將年份yeard與400整除 div bx cmp dx,0 jne notleap isleap : ;判斷閏年 mov ah,09 lea dx,judge1 int 21h jmp over2 notleap : ;判斷非閏年 mov ah,09 lea dx,judge2 int 21hover2: mov ah,09 ;判斷是否繼續(xù) lea dx,judge int 21h mov ah,01 int 21h cmp al,n je outend cmp al,N je outendjmp continueoutend: mov ah,4ch int 21hcode ends end start4 實驗結果5 心得體會1) 將復雜問題轉化成若干個簡單的問題,有助于問題的解決;2) 當程序出現(xiàn)語義錯誤時,多使用p指令檢測程序,有利

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論