匯編判斷閏年實習(xí)報告_第1頁
匯編判斷閏年實習(xí)報告_第2頁
匯編判斷閏年實習(xí)報告_第3頁
匯編判斷閏年實習(xí)報告_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

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

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

3、最大循環(huán)次數(shù)為4,初始字符串偏移量i為2,年份變量yeard為0;b) 首先將ax寄存器置0,然后將year的首地址賦給si,再將si加上偏移量i用寄存器間接尋址方式將si存儲的字符賦給al;c) 將ax中存放的字符減去30h轉(zhuǎn)化為十進(jìn)制數(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) 將存有十進(jìn)制形式的年

4、份ax的數(shù)值壓入棧中,然后與4進(jìn)行整除運算,判斷其余數(shù)是否為0。是,則進(jìn)行下一步;否,跳到e;b) 將棧中的數(shù)值出棧賦給寄存器ax,再ax的數(shù)值壓入棧中,然后與100進(jìn)行整除運算,判斷其余數(shù)是否為0。是,則進(jìn)行下一步;否,跳到d;c) 將棧中的數(shù)值出棧賦給寄存器ax,然后與100進(jìn)行整除運算,判斷其余數(shù)是否為0。是,則進(jìn)行下一步;否,跳到e;d) 輸出提示“yes!”;跳到步驟7;e) 輸出提示“No!”;7) 輸出提示“Continue?(n)”,若想結(jié)束程序則按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進(jìn)制數(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 ;設(shè)置最大循環(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 ;將字符轉(zhuǎn)化為10進(jìn)制 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 實驗結(jié)果5 心得體會1) 將復(fù)雜問題轉(zhuǎn)化成若干個簡單的問題,有助于問題的解決;2) 當(dāng)程序出現(xiàn)語義錯誤時,多使用p指令檢測程序,有利

溫馨提示

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

評論

0/150

提交評論