作業報告(第9講)

2021-10-07 08:39:50 字數 4499 閱讀 5884

請程式設計序完成下面的任務。題目要求:編制乙個子程式,求y=x^4,x為位元組,y為字,且不會溢位

子程式的引數由暫存器bl提供,返回結果在ax中;

請在下面**的基礎上完成:

assume cs:codesg, ss:stacksg

stacksg segment

db 32 dup (0)

stacksg ends

codesg segment

main proc

start: mov ax,stack

mov ss,ax

mov sp,16

mov bl,8 ;為呼叫子程式準備引數

call subp

;子程式呼叫返回後要做的處理

mov ax,4c00h

int 21h

main endp

;子程式功能:求y=x^4

;入口引數:x的值由bl提供

;返回值:y值由ax返回,且y值不會超過1個字的範圍

subp proc

;子程式中使用的暫存器入棧

;子程式內容

;子程式使用的暫存器出棧

retsubp endp

codesg ends

end start

版本1解答:

我完成的程式如下(縮格排放,適量注釋):

assume cs:codesg, ss:stack

stack segment

db 32 dup (0)

stack ends

codesg segment

main proc

start: mov ax,stack

mov ss,ax

mov sp,16

mov bl, 8 ;為呼叫子程式準備引數

call subp

;子程式呼叫返回後要做的處理

mov ax,4c00h

int 21h

main endp

;返回值:y值由ax返回,且y值不會超過1個字的範圍

subp proc

push cx ;子程式中使用的暫存器入棧

mov bh,0 ;子程式內容

mov dx,0

mov ax,0

mov al,bl

mov cx,3

s: mul bx

loop s

pop cx

retsubp endp

codesg ends

end start測試方法:dosbos

執行後結果:

子程式不變,主程式中提供如下資料區,在主程式中,迴圈呼叫子程式,完成y=x^4的求解,並將結果存入在相應的資料區:

data segment

x db 1,2,3,4,5,6,7,8

y dw 0,0,0,0,0,0,0,0

data ends

版本2解答:

我完成的程式如下(縮格排放,適量注釋):

assume cs:codesg, ss:stack,ds:data

data segment

x db 1,2,3,4,5,6,7,8

y dw 0,0,0,0,0,0,0,0

data ends

stack segment

db 32 dup (0)

stack ends

codesg segment

main proc

start: mov ax,stack

mov ss,ax

mov sp,16

mov ax,data

mov ds,ax

mov cx,8

mov si,0

mov di,8

s_1: mov bl,[si] ;為呼叫子程式準備引數

call subp

mov [di],ax

inc si

inc di

inc di

loop s_1

mov ax,4c00h

int 21h

main endp

subp proc

push cx ;子程式中使用的暫存器入棧

mov bh,0 ;子程式內容

mov dx,0

mov ax,0

mov al,bl

mov cx,3

s: mul bx

loop s

pop cx

retsubp endp

codesg ends

end start

測試方法:

執行後結果:

資料區不變,子程式要完成全部8個資料的求解任務,主程式只呼叫一次子程式即可。資料x的起始偏移位址由si提供,存放結果的y的偏移位址,由di提供,在呼叫前,由主程式為子程式提供si、di值。

版本3解答:

我完成的程式如下(縮格排放,適量注釋):

a

ssume cs:codesg, ss:stack,ds:data

data segment

x db 1,2,3,4,5,6,7,8

y dw 0,0,0,0,0,0,0,0

data ends

stack segment

db 32 dup (0)

stack ends

codesg segment

main proc

start: mov ax,stack

mov ss,ax

mov sp,16

mov ax,data

mov ds,ax

mov si,0

mov di,8

call subp

mov ax,4c00h

int 21h

main endp

subp proc

push cx ;子程式中使用的暫存器入棧

mov cx,8

s_1: mov bl,[si]

mov bh,0

mov dx,0

mov ax,0

mov al,bl

push cx

mov cx,3

s_2: mul bx

loop s_2

pop cx

mov [di],ax

inc si

inc di

inc di

loop s_1

pop cx

retsubp endp

codesg ends

end start

測試方法:

執行後結果:

將上面的程式按多檔案的方式存放。

版本4解答:

我完成的程式如下(縮格排放,適量注釋):

extrn subp:far

assume cs:codesg, ss:stack,ds:data

data segment

x db 1,2,3,4,5,6,7,8

y dw 0,0,0,0,0,0,0,0

data ends

stack segment

db 32 dup (0)

stack ends

codesg segment

main proc

start: mov ax,stack

mov ss,ax

mov sp,16

mov ax,data

mov ds,ax

mov si,0

mov di,8

call subp

mov ax,4c00h

int 21h

main endp

codesg ends

end start

public subp

assume cs:codesg

codesg segment

subp proc far

push cx ;子程式中使用的暫存器入棧

mov cx,8

s_1: mov bl,[si]

mov bh,0

mov dx,0

mov ax,0

mov al,bl

push cx

mov cx,3

s_2: mul bx

loop s_2

pop cx

mov [di],ax

inc si

inc di

inc di

loop s_1

pop cx

retsubp endp

codesg ends

end

測試方法:

執行後結果:

方法體味:如果有乙個題目,要求你直接完成版本4的工作,你是否會意識到可以從版本1開始起步,逐步加量到版本4?如果要給這種方法起乙個名字,你願意叫它什麼?

c 作業報告1

一 問題及 檔名稱 test.cpp 作 者 胡嘉威 完成日期 2017 年 3 月 3 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入年份及月份,輸出本月天數 採用switch語句加以計算 輸入描述 2017 3 問題描述 輸入年份及月份,輸出本月天數 程式輸出 本月有31天 問題分析...

程式設計作業報告專案3(1)

檔名稱 s.cpp 作 者 陳旭 完成日期 2014年10月14日 版 本 號 v1.0 問題描述 輸入兩個正整數,計算並輸出兩數的正差值 輸入描述 兩個整數,代表輸入的兩個正整數a.b 程式輸出 乙個整數,代表輸出兩數的正差值c include using namespace std int ma...

程式設計作業報告專案3(2)

檔名稱 s.cpp 作 者 陳旭 完成日期 2014年10月14日 版 本 號 v1.0 問題描述 輸入三個正整數,計算並輸出其中的最大值 輸入描述 三個整數,代表輸入的三個正整數a,b,c 程式輸出 乙個整數,代表輸出其中的最大值x include using namespace std int ...