組合語言程式設計,接收從鍵盤輸入的字元,以CTR C結束,並將其中的小寫字母轉變為大寫字母,然後在螢幕上顯示

2021-07-01 01:19:30 字數 5242 閱讀 3302

1樓:

問題非常多:

1. 首先題目就有問題,不可能「接收從鍵盤輸入的字元,以ctr+c 結束」。對於命令提示符來說,按下ctrl+c,就會強行退出這個程式,所以不可能以ctrl+c結束的。

應該是按回車結束輸入。

2. data裡有中文標點符號。

3. 輸入字元後,按下回車,在c語言裡執行的時候會自動換行,但是在彙編裡不會,所以你要自己換行。

4. 用mov ah, 0ah; int 21h中斷輸入後,輸入的有效字元數存放在buf1單元裡,所以迴圈的時候應該把cx設定為buf1單元裡的值,而不是count

5. 輸入的有效字元從buf2單元開始儲存,所以做大小寫轉換的時候,應該從buf2單元開始,而不應該從buf單元開始

6. 61h和7ah都是小寫字母,所以跳轉指令中不應該有e。同時,有符號、無符號不要混用,所以jbe改為jb,jge改為ja。

7. 輸入字元時,是以回車符作為結束;而輸出字元時,是以'$'作為結束,所以對輸入的字元,你要把最後一個回車符轉為『$'。

修改後的程式如下:

data segment

mess1 db 'input: ',13,10,'$'

newlinedb 13, 10, '$' ;這行是專門用來換行的

mess2 db 'output:',13,10,'$'

buf db 20

buf1 db ?

buf2 db 20 dup(?)

count equ $-buf

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov si, 0

lea dx,mess1

mov ah,09h

int 21h

mov dx,offset buf

mov ah,0ah

int 21h

lea dx, newline ;專門用來換行

mov ah, 9

int 21h

mov cl, buf1

mov ch, 0 ;buf1單元中存放的是有效輸入字元數

loop1:mov al,buf2[si] ;從buf2單元開始才是有效字元

cmp al,61h

jb next ;jbe改為jb

cmp al,7ah

ja next ;jge改為ja

sub al,20h

mov buf2[si],al ;從buf2單元開始才是有效字元

next: inc si

loop loop1

mov buf2[si], '$' ;迴圈結束,把當前的字元修改為'$'

lea dx,mess2

mov ah,09h

int 21h

mov dx,offset buf2 ;從buf2單元開始才是有效字元

mov ah,09h

int 21h

mov ah,4ch

int 21h

code ends

end start

2樓:慶珈藍容

有些小問題。可以實現輸入若干字元直到^c,只是需要使用01h功能呼叫。下面是改正後的程式:

data segment

mess1 db 'input: ',13,10,'$'

mess2 db 'output:',13,10,'$'

buf2 db 80 dup(?)

count equ $-buf

data ends

code segment

assume cs:code,ds:datastart: mov ax,data

mov ds,ax

mov si,0

lea dx,mess1

mov ah,09h

int 21h

mov bx,offset buf2

mov cx,0

next1:

mov ah,01h

int 21h

cmp al,03h ;ctrl+c

je next2

inc cx

mov [bx],al

inc bx

jmp next1

next2:

mov al,buf2[si]

cmp al,61h

jb next3

cmp al,7ah

jg next3

sub al,20h

mov buf2[si],al

next3: inc si

loop next2

mov buf2[si],'$'

lea dx,mess2

mov ah,09h

int 21h

mov dx,offset buf2

mov ah,09h

int 21h

mov ah,4ch

int 21h

code ends

end start

組合語言是一種什麼程式設計語言?

3樓:娛樂大潮咖

組合語言是用於電子計算機,微處理器,微控制器或其他可程式設計裝置的低階語言,e68a8462616964757a686964616f31333431366431也稱為符號語言。 在組合語言中,助記符用於替換機器指令的操作碼,並且使用地址或運算元代替指令或運算元的地址。

在不同的裝置中,組合語言對應於不同的機器語言指令集,這些指令集通過彙編過程轉換為機器指令。 特定的組合語言和特定的機器語言指令集是一一對應的,不能直接移植到不同的平臺上。

由於彙編指令系統龐大,因此有必要構建一種指令系統,該指令系統具有大量指令,複雜的格式以及較差的儲存空間。 指令中最難的部分是指令支援的定址模式。 指令的本質是如何獲取指令中的運算元。

(1)傳送指令:

包括通用資料傳送指令mov、條件傳送指令cmovcc、堆疊操作指令push/pusha/pushad/pop/popa/popad、交換指令xchg/xlat/bswap、地址或段描述符選擇子傳送指令lea/lds/les/lfs/lgs/lss等

(2)邏輯運算:

這部分指令用於執行算術和邏輯運算,包括加法指令add/adc、減法指令sub/sbb、加一指令inc、減一指令dec、比較操作指令cmp等。

(3)移位指令:

這部分指令用於將暫存器或記憶體運算元移動指定的次數。包括邏輯左移指令shl、邏輯右移指令shr、算術左移指令sal、算術右移指令sar、迴圈左移指令rol、迴圈右移指令ror等。

但是,對於計算機的基本組合語言而言,這種型別的定址將涉及大量與複雜的儲存管理方法密切相關的計算儲存格式,因此很難理解。 最後,彙編指令還與標誌的影響方式有關,但是處理器標誌非常複雜,因此很難掌握該機制。

組合語言是計算機提供給使用者的最快,最高效的語言,並且是唯一可以利用計算機的所有硬體功能並直接控制硬體的語言。 但是,由於編寫和除錯組合語言程式比高階語言複雜,因此它們的應用程式目前不如高階語言廣泛。

暫存器可以理解為cpu中的儲存器或者記憶體,是cpu中可以儲存資料的器件,一個cpu中可以有多個暫存器。上述示例中的 ax 、bx 就是暫存器的代號。

組合語言比機器語言更具可讀性,但是組合語言仍然比高階語言更不可讀。 但是,用它編寫的程式具有儲存空間低和執行速度快的特性,並且不能用高階語言代替。 在實際應用中,組合語言的使用取決於特定的應用程式要求,軟體開發時間和質量。

4樓:鶴髮童顏

組合語言是依賴於計算機的低階的程式設計語言。

這些指令都是二進位制的,稱為操作碼(opcode),比如加法指令就是00000011。編譯器的作用,就是將高階語言寫好的程式,翻譯成一條條操作碼。

對於人類來說,二進位制程式是不可讀的,根本看不出來機器幹了什麼。為了解決可讀性的問題,以及偶爾的編輯需求,就誕生了組合語言。

由於彙編更接近機器語言,能夠直接對硬體進行操作,生成的程式與其他的語言相比具有更高的執行速度,佔用更小的記憶體,因此在一些對於時效性要求很高的程式、許多大型程式的核心模組以及工業控制方面大量應用。

組合語言是二進位制指令的文字形式,與指令是一一對應的關係。比如,加法指令00000011寫成組合語言就是 add。只要還原成二進位制,組合語言就可以被 cpu 直接執行,所以它是最底層的低階語言。

組合語言基礎命令就只有「將資訊從某處移到某處」和加、減等,都是幼兒園小孩能理解的計算。跳轉命令分直接跳轉和有條件跳轉,總共加起來也沒幾個。

而且每個模組都很小,能寫的內容非常有限。但在這麼簡陋的基礎上,可以從最基礎的傳輸資訊、到用加法減法配合儲存單元實現乘法除法等運算、再到更復雜的資訊處理,可以說這個遊戲在其設計範圍內真的做到極致了。

學習組合語言的好處:

可以自己編寫出比較高階的程式,開始專精彙編分支的某一種比如51微控制器,arm,x86,懂得硬體基本構造和計算機邏輯電路和cpu原理。可以自己編寫除錯底層系統。可以彙編/反彙編,可以進行病毒的編寫和除錯和破譯。

移動端系統底層/電子產品/硬體基本系統熟練於心,可以進階成一個真正的電子極客了。

5樓:魏啟

組合語言是一種助記符,一種低階語言,直接面對指令,將二進位制指令替換**類便於記憶的字串,並冠以特殊的格式。每一條彙編指令對應一條二進位制指令。根據核心架構的不同,不同的指令有不同的長度和格式。

6樓:江柳兒情感生活

組合語言(assembly language)包含用抄短bai助記符如 add、mov、sub 和 call 書寫的語句。彙編du語言與機器語言是一zhi對一(daoone-to-one)的關係:每一條組合語言指令對應一條機器語言指令。

7樓:匿名使用者

組合語言是一種依賴於計算機的低階 程式設計語言 。

組合語言是直接告訴cpu的每個暫存器及每個外設去做什麼,因為是最基本的語言,比這再低階的語言就職110100010101011110之類的語言了。

8樓:左手半夏

組合語言本身很簡單,常用指令沒幾個,語法規則也不多,看幾個小時資料似乎就明白了,但其實不然。彙編的背後是體系結構,是程式設計拋開各種高層形態的最根本,最本質的解釋。

組合語言程式設計的問題,組合語言程式設計問題

1.jmp bx 如果 bx 1020h,那麼 ip 1020h,因為此種形式為通過暫存器的段內間接轉移,執行時將把暫存器的內容直接送ip,所以執行此指令後ip的值為1020h 2.jmp tab bx si 如果 ds 2000h,bx 1020h,si 0002h,tab 0010h,21032...

C語言程式設計從鍵盤輸入年份和月份,輸出該月有多少天(考慮閏年)

用switch選擇的 include int main return 0 用指標型列舉的 include int a p1,p2,p3,i 1,k 0 int main include main 普通 include main 擴充套件資料switch 語句可以處理多分支選擇問題,根據其中break...

c語言程式設計。從鍵盤輸入大寫字母,要求改用小寫字母輸出

include void main char c scanf c c if c 65 c 90 else 一個大寫字母和與之對應的小寫字母的ascii碼相差32 如下 include int main 執行結果如下 擴充套件資料 大寫英文字母與小寫英文按ascll碼十進位制數之間相差32。在計算機中...