請程式設計序完成下面的任務。題目要求:編制乙個子程式,求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 ...