第一次寫彙編,兩天從一臉蒙蔽到硬著頭皮寫程式,我做到了,寫出來的時候激動得說不出話
函式:當|x|<=3時y=3*x-5,當|x|>3,y=6
data segment
promrt db "input x (-10000~+10000):$"
buffer db 6, ?, 6 dup("$")
c10 dw 10
x dw ?
out_msg db 0dh,0ah,"y=$"
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,promrt ;輸出提示符
mov ah,9
int 21h
lea dx,buffer ;輸入字串
mov ah,0ah
int 21h
lea bx,buffer+2 ;判斷第乙個字元是否是負號
mov dl,[bx]
cmp dl,'-' ;判斷並跳入
je fu
zheng: ;正數輸入
mov cl,buffer+1 ;將第乙個字元,數字字元的個數作為迴圈次數
mov ch,0 ;迴圈次數高八位清0
lea bx,buffer+2 ;裝載輸入字元首位址
mov ax,0 ;累加器清0
jmp one ;跳入正數的第乙個步驟
fu: ;負數輸入
mov cl,buffer+1 ;將第乙個字元,數字字元的個數作為迴圈次數
sub cx,01h ;將陣列字元個數減一,去除負號的個數
mov ch,0 ;迴圈次數高八位清0
lea bx,buffer+2 ;裝載輸入字元首位址,帶符號
mov ax,0 ;累加器清0
inc bx ;指標bx+1,跳過負數
onef: ;負數字元轉化為數字
mul c10 ;p=p*10
mov dl,[bx] ;取第乙個字元
sub dx,30h ;轉化為數字
add ax,dx ;數字賦予ax
inc bx ;指標往後加一
loop onef ;迴圈
mov x,ax ;賦值給x
compf: ;負數判斷
cmp x,3
jg l ;對於小於-3,同大於3
cmp x,1 ;對一特殊處理
je lfu1
jmp lfu ;對-1和-3的處理
one: ;字元轉化為數字
mul c10 ;p=p*10
mov dl,[bx] ;取第乙個字元
sub dx,30h ;轉化為數字
add ax,dx ;數字賦予ax
inc bx ;指標往後加一
loop one ;迴圈
mov x,ax ;賦值給x
comp:cmp x,3 ;正數判斷
jg l
cmp x,1 ;對1特殊處理
je l11
cmp x,0 ;對0特殊處理
je l0
l1: ;小於3且不等於0,1順序執行
mov bx,x ;bx=x
mov ax,x ;ax=x
add ax,bx ;ax=ax+x=2*x
add ax,bx ;ax=ax+bx=3*x
sub ax,5 ;ax=ax*3-5
jmp output0 ;輸出,第一類
l: ;賦值答案
mov ax,6
jmp output0
l11: ;x=1輸出
mov ax,2
jmp output2 ;一位負數輸出
l0: ;x=0輸出
mov ax,5
jmp output2 ;一位負數輸出
lfu:
lea dx,out_msg ;輸出提示符
mov ah,9
int 21h
mov ah,2 ;對於輸出為負數的先輸出負號,呼叫二號指令
mov dl,'-' ;負號的acill碼付給dl
int 21h ;輸出
mov bx,x ;bx=x
mov ax,x ;ax=x
add ax,bx ;ax=ax+x=2*x
add ax,bx ;ax=ax+bx=3*x
add ax,5 ;ax=ax*3-5
mov bl,10 ;給bl賦值為10
div bl ;ax=ax/10
mov dx,ax ;將ax賦值給dx
add dx,3030h ;把兩位元組的非壓縮bcd碼轉成可以顯示的ascii碼
mov ah,2
int 21h
mov dl,dh ;將高四位付給低四位輸出,兩位數且已經轉化為ascii碼
mov ah,2
int 21h
jmp over ;輸出完畢,結束
lfu1:
lea dx,out_msg ;輸出提示符
mov ah,9
int 21h
mov ah,2 ;對於輸出為負數的先輸出負號,呼叫二號指令
mov dl,'-' ;負號的acill碼付給dl
int 21h ;輸出
mov bx,x ;bx=x
mov ax,x ;ax=x
add ax,bx ;ax=ax+x=2*x
add ax,bx ;ax=ax+bx=3*x
add ax,5 ;ax=ax*3-5
jmp output1 ;無需輸出提示符,直接出最後一位數字答案
output0:
lea dx,out_msg ;輸出提示符
mov ah,9
int 21h
output1:
add ax,30h ;數字轉化為數字字元
mov bx,ax ;賦值
mov ah,2 ;輸出
mov dl,bl
int 21h
jmp over
output2:
add ax,30h
mov bx,ax
lea dx,out_msg ;輸出提示符
mov ah,9
int 21h
mov ah,2
mov dl,'-'
int 21h
mov ah,2
mov dl,bl
int 21h
over:
mov ax,4c00h
int 21h
code ends
end start
組合語言 求分段函式值
題目 計算給定函式值 其中,從鍵盤輸入x,y,輸出資料為a。輸入輸出時候都要求有提示資訊。考查知識點 分支結構的應用。如下 1 example assembly language program 2 author karllen3 date revised 5 2014 45 386 6.model...
分段函式求值
上機內容 用if else語句求解分段函式。上機目的 學會分支結構程式設計。作 者 李洋 完成日期 2012 年 10月 23日 版 本 號 v1.0 輸入描述 x,x為非負數。問題描述 求以x為自變數的分段函式的值。程式輸出 y的值。問題分析 略 演算法設計 輸入x後,判斷是否為非負數。當是非負數...
分段函式求值
上機內容 用if elsse語句和switch語句求解分段函式 上機目的 學會分支結構程式設計 作 者 李全港 完成日期 2012 年 10月22 日 版 本 號 v1.0 輸入描述 x x 為非負數 問題描述 求以 x 為自變數的分段函式的值,y x 0 x 2 y x 2 2 2 x 6 y x...