分段函式(彙編)

2021-07-24 11:55:29 字數 4643 閱讀 1106

第一次寫彙編,兩天從一臉蒙蔽到硬著頭皮寫程式,我做到了,寫出來的時候激動得說不出話

函式:當|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...