組合語言編寫:畫脈衝波圖形(詳細要求見內)

  • 作者:由 匿名使用者 發表于 攝影
  • 2022-08-29

畫脈衝波圖形

要求:使用者以十進位制數形式從鍵盤輸入脈衝高度、脈衝寬度和顏色引數(格式同上)後,以螢幕中間行為脈衝中間行,從左到右、滿屏畫出相應的脈衝波圖形。

給出

1。源程式清單(必須包括!)

2。程式總體設計方案 、思路

3。程式設計框圖

如果能在3天內完成,達到要求,令人滿意,會有更多分數奉上,決不食言!

注意,使用匯編語言設計 ,8086系列

看來百度真是無人能回答此題

至於樓下還有人 說給兩百才幫忙做,那你不要來百度。

組合語言編寫:畫脈衝波圖形(詳細要求見內)湯旺河邊 2009-06-03

; 本程式透過編譯,執行正確

; 操作說明:執行開始,首先要輸入4個引數:脈衝高度、脈衝寬度、脈衝間斷寬度和波線顏色。

; 各項取值範圍:

; 脈衝高度:0~239

; 脈衝寬度:0~320

; 脈衝間斷寬度:0~320

; 波線顏色:1~15(參見下方的顏色引數表)

; 數值位數滿3位的,自動結束當前項輸入,不必回車;不足3位數的,須按回車結束當前項輸入

Code Segment

Assume CS:Code,DS:Code

CR EQU 000DH

LF EQU 000AH

KBBack EQU 0008H

; -----------------------------------------

; Dark Colors (Foreground & Background)

; Constant Value

Black EQU 0

Blue EQU 1

Green EQU 2

Cyan EQU 3

Red EQU 4

Magenta EQU 5

Brown EQU 6

LightGray EQU 7

; Light Colors(Foreground)

; Constant Value

DarkGray EQU 8

LightBlue EQU 9

LightGreen EQU 10

LightCyan EQU 11

LightRed EQU 12

LightMagenta EQU 13

Yellow EQU 14

White EQU 15

Blinking EQU 80H

; -----------------------------------------

; 功能:顯示指定地址(Str_Addr)的字串

; 入口:

; Str_Addr=字串地址(要求在資料段)

; 用法: Output Str_Addr

; 用法舉例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -----------------------------------------

; 功能:輸出回車換行

Enter_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

Enter_CTLF endp

; -----------------------------------------

; 功能:取游標位置

; 入口:無

; 出口:DH=行號,DL=列號

GetCursor Proc Near

PUSH AX

PUSH BX

PUSH CX

XOR BX,BX

MOV AH,3

INT 10H

MOV Cursor_Row,DH

MOV Cursor_Col,DL

POP CX

POP BX

POP AX

RET

Cursor_Row DB ?

Cursor_Col DB ?

GetCursor EndP

; -----------------------------------------

; 功能:置游標位置

; 入口:Cursor_Row=行座標; Cursor_Col: 列座標)

SetCursor Proc Near

PUSH CX

PUSH BX

PUSH AX

MOV DH,Cursor_Row

MOV DL,Cursor_Col

XOR BX,BX

MOV AH,2

INT 10H

POP AX

POP BX

POP CX

RET

SetCursor EndP

; -----------------------------------------

; 功能:鍵盤輸入一個N位的十進位制數字,將其轉換成二進位制數並儲存在指定的記憶體單元。

; 入口:N=數字位數;di=儲存輸入的數字首地址

; 出口:轉換後的二進位制數儲存在di所指的單元

Input_Digit Proc Near

push dx

push cx

push bx

push di

lea di,@@Save_Tmp

push di

cld

mov cx,N

push cx

@@Input: call GetCursor ;取游標位置

mov ah,1 ;從鍵盤接受一個字元

int 21h

cmp al,CR ;若鍵入的是回車,已經鍵入的數字不足N位

jz @@ASC_Dec ;轉去處理已經鍵入的數字

cmp al,KBBack

jz @@KB_Back ;若是回空鍵,重新輸入

cmp al,‘0’

jb @@KBBack ;若低於數字‘0’,重新輸入

cmp al,‘9’

ja @@KBBack ;若低於數字‘9’,重新輸入

jmp @@Save_Dig

@@KB_Back: dec Cursor_Col

inc cx

dec di

@@KBBack: call SetCursor ;置游標位置

jmp @@Input

@@Save_Dig: and al,0fh ;轉換成二進位制數

stosb ;儲存

loop @@Input ;接受下一個數字

@@ASC_Dec: mov ax,cx

pop cx

pop si

sub cx,ax ;實際輸入的數字位數

xor bp,bp

xor dx,dx

xor ax,ax

jcxz @@Save_Ret ;若直接回車,沒有輸入任何數字,按輸入‘0’處理

dec cx ;實際輸入的數字位數減1,準備把輸入的這一串數字轉換成二進位制數

jcxz @@One_Digit ;若輸入的數字只有一位,轉去直接儲存這個二進位制數

mov bx,10

@@Mul_Ten: lodsb

cbw

add ax,bp

mul bx

mov bp,ax

loop @@Mul_Ten

@@One_Digit:lodsb

cbw

add ax,bp

@@Save_Ret: pop di

stosw

pop bx

pop cx

pop dx

ret

@@Save_Tmp db 16 dup(?)

Input_Digit EndP

; -----------------------------------------

Prompt_Str1 db ‘Please input pulse hight: $’ ;提示輸入脈衝高度

Prompt_Str2 db ‘Please input pulse width: $’ ;提示輸入脈衝寬度

Prompt_Str3 db ‘Please input pulse wait time: $’ ;提示輸入間斷時間

Prompt_Str4 db ‘Please input line colour: $’ ;提示輸入波線顏色

N equ 3 ;輸入十進位制數值位數

Hight_Pulse dw ? ;脈衝高度

Width_Pulse dw ? ;脈衝寬度

Wait_Time dw ? ;脈衝間斷寬度

Colou_Pulse dw ? ;波線顏色

Start: push cs

pop ds

push cs

pop es ;使資料段、附加段與程式碼段同段

Output Prompt_Str1 ;提示輸入脈衝高度

lea di,Hight_Pulse ;脈衝高度

call Input_Digit ;鍵盤輸入一個3位的十進位制數字,將其轉換成二進位制數並儲存在指定的記憶體單元

call Enter_CTLF ;輸出一個回車、換行

Output Prompt_Str2 ;提示輸入脈衝寬度

lea di,Width_Pulse ;脈衝寬度

call Input_Digit

call Enter_CTLF ;輸出一個回車、換行

Output Prompt_Str3 ;提示輸入脈衝間斷寬度

lea di,Wait_Time ;脈衝間斷寬度

call Input_Digit

call Enter_CTLF ;輸出一個回車、換行

Output Prompt_Str4 ;提示輸入波線顏色

lea di,Colou_Pulse ;波線顏色

call Input_Digit

mov ax,12h ;設定640x480,16色圖形顯示方式

int 10h

; 以螢幕中間行為脈衝中間行,畫一條橫線

mov bp,640 ;橫向點數

xor bh,bh

xor cx,cx ;橫向起始點

mov dx,480 ;圖形顯示方式,一列480點

shr dx,1 ;縱向起始點

mov ah,0ch

mov al,byte ptr Colou_Pulse ;取畫素顏色

L0: int 10h ;寫一個指定顏色的畫素

inc cx ;橫向向右增值

dec bp

test bp,bp

jnz L0

; 從左到右、滿屏畫出相應的脈衝波圖形。

mov bp,Hight_Pulse ;取脈衝高度

xor cx,cx ;橫向起始點

mov dx,480 ;圖形顯示方式,一列480點

shr dx,1 ;縱向起始點

L1: int 10h ;寫一個指定顏色的畫素

dec dx ;縱向向上減值

dec bp

test bp,bp

jnz L1

Pulse_Wave: mov bp,Width_Pulse ;取脈衝寬度,一個脈衝週期

L2: int 10h ;寫一個指定顏色的畫素

inc cx ;橫向向右增值

cmp cx,639

ja Pause ;若到達螢幕最右邊,跳出迴圈,等待使用者按鍵,結束程式

dec bp

test bp,bp

jnz L2

mov bp,Hight_Pulse ;取脈衝高度

shl bp,1

L3: int 10h ;寫一個指定顏色的畫素

inc dx ;縱向向下增值

dec bp

test bp,bp

jnz L3

mov bp,Wait_Time ;取脈衝間斷寬度

L4: int 10h ;寫一個指定顏色的畫素

inc cx ;橫向向右增值

cmp cx,639

ja Pause ;若到達螢幕最右邊,跳出迴圈,等待使用者按鍵,結束程式

dec bp

test bp,bp

jnz L4

mov bp,Hight_Pulse ;取脈衝高度

shl bp,1

L5: int 10h ;寫一個指定顏色的畫素

dec dx ;縱向向上減值

dec bp

test bp,bp

jnz L5

jmp Pulse_Wave ;一個脈衝週期結束,進行下一個脈衝週期

Pause: mov ah,1 ;暫停,按任意鍵結束程式

int 21h

mov ah,3 ;設定80x25,16色文字顯示方式

int 10h

Exit_Proc: mov ah,4ch ;結束程式

int 21h

Code ENDS

END Start ;編譯到此結束

組合語言編寫:畫脈衝波圖形(詳細要求見內)網友72c01e064 2009-05-27

用定時器啊````很容易的 這個是方波的,請參考,然後自己編:ORG 0000H

LJMP MAIN

ORG 000BH

LJMP DVT0

ORG 0100H

MAIN:MOV TMOD,#01H

MOV TH0,#0FFH

MOV TL0,#0F9H

SETB ET0

SETB EA

SETB TR0

SJMP $

DVT0:CPL P1。0

MOV TH0,#0FFH

MOV TL0,#0F9H

RETI

END

組合語言編寫:畫脈衝波圖形(詳細要求見內)相忘江湖1999 2009-05-27

薩子組合語言,沒明白,樓上用MCS51的

組合語言編寫:畫脈衝波圖形(詳細要求見內)網友109d3f065 2009-05-31

“給兩百塊錢可以考慮一下 ”

開個玩笑

組合語言編寫:畫脈衝波圖形(詳細要求見內)一萬光年MEGn0 2009-05-27

用什麼顯示波形呢?

Top