當前位置:首頁 » 編程語言 » c語言程序裡面有sm嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言程序裡面有sm嗎

發布時間: 2022-09-21 13:35:16

㈠ 關於c語言中的連接符的問題,請高手 指教

教你如何裝XP系統

第一步,設置光啟:
所謂光啟,意思就是計算機在啟動的時候首先讀光碟機,這樣的話如果光碟機中有具有光啟功能的光碟就可以趕在硬碟啟動之前讀取出來(比如從光碟安裝系統的時候)。
設置方法:
1.啟動計算機,並按住DEL鍵不放,直到出現BIOS設置窗口(通常為藍色背景,黃色英文字)。
2.選擇並進入第二項,「BIOS SETUP」(BIOS設置)。在裡面找到包含BOOT文字的項或組,並找到依次排列的「FIRST」「SECEND」「THIRD」三項,分別代表「第一項啟動」「第二項啟動」和「第三項啟動」。這里我們按順序依次設置為「光碟機」「軟碟機」「硬碟」即可。(如在這一頁沒有見到這三項E文,通常BOOT右邊的選項菜單為「SETUP」,這時按回車進入即可看到了)應該選擇「FIRST」敲回車鍵,在出來的子菜單選擇CD-ROM。再按回車鍵
3.選擇好啟動方式後,按F10鍵,出現E文對話框,按「Y」鍵(可省略),並回車,計算機自動重啟,證明更改的設置生效了。

第二步,從光碟安裝XP系統
在重啟之前放入XP安裝光碟,在看到屏幕底部出現CD字樣的時候,按回車鍵。才能實現光啟,否則計算機開始讀取硬碟,也就是跳過光啟從硬碟啟動了。
XP系統盤光啟之後便是藍色背景的安裝界面,這時系統會自動分析計算機信息,不需要任何操作,直到顯示器屏幕變黑一下,隨後出現藍色背景的中文界面。
這時首先出現的是XP系統的協議,按F8鍵(代表同意此協議),之後可以見到硬碟所有分區的信息列表,並且有中文的操作說明。選擇C盤,按D鍵刪除分區(之前記得先將C盤的有用文件做好備份),C盤的位置變成「未分區」,再在原C盤位置(即「未分區」位置)按C鍵創建分區,分區大小不需要調整。之後原C盤位置變成了「新的未使用」字樣,按回車鍵繼續。
接下來有可能出現格式化分區選項頁面,推薦選擇「用FAT32格式化分區(快)」。按回車鍵繼續。
系統開始格式化C盤,速度很快。格式化之後是分析硬碟和以前的WINDOWS操作系統,速度同樣很快,隨後是復制文件,大約需要8到13分鍾不等(根據機器的配置決定)。
復制文件完成(100%)後,系統會自動重新啟動,這時當再次見到CD-ROM.....的時候,不需要按任何鍵,讓系統從硬碟啟動,因為安裝文件的一部分已經復制到硬碟里了(註:此時光碟不可以取出)。
出現藍色背景的彩色XP安裝界面,左側有安裝進度條和剩餘時間顯示,起始值為39分鍾,也是根據機器的配置決定,通常P4,2.4的機器的安裝時間大約是15到20分鍾。
此時直到安裝結束,計算機自動重啟之前,除了輸入序列號和計算機信息(隨意填寫),以及敲2到3次回車之外,不需要做任何其它操作。系統會自動完成安裝。

第三步,驅動的安裝
1.重啟之後,將光碟取出,讓計算機從硬碟啟動,進入XP的設置窗口。
2.依次按「下一步」,「跳過」,選擇「不注冊」,「完成」。
3.進入XP系統桌面。
4.在桌面上單擊滑鼠右鍵,選擇「屬性」,選擇「顯示」選項卡,點擊「自定義桌面」項,勾選「我的電腦」,選擇「確定」退出。
5.返回桌面,右鍵單擊「我的電腦」,選擇「屬性」,選擇「硬體」選項卡,選擇「設備管理器」,裡面是計算機所有硬體的管理窗口,此中所有前面出現黃色問號+嘆號的選項代表未安裝驅動程序的硬體,雙擊打開其屬性,選擇「重新安裝驅動程序」,放入相應當驅動光碟,選擇「自動安裝」,系統會自動識別對應當驅動程序並安裝完成。(AUDIO為音效卡,VGA為顯卡,SM為主板,需要首先安裝主板驅動,如沒有SM項則代表不用安裝)。安裝好所有驅動之後重新啟動計算機。至此驅動程序安裝完成。

1、找一張帶光碟啟動的 WIN 2000的光碟,然後在准備一張XP的安裝盤!
2、現在電腦里下載好沖擊波和震盪波病毒的免疫補丁,並保存在除C區外的分區里,比如D E都可以

3、重啟電腦,插入WIN2000光碟 ,當電腦重啟後,一直狂點DEL鍵,進如BIOS,選擇「Advavced BIOS Features」,進去後,有3個要特別需要設置的,把「First Boot Device」後邊的設置為CDROM,把「Second Boot Device」後邊的設置為HDD-0或者HDD-1,把「Third Boot Device」後邊的設置為FLOPPY,然後按一下鍵盤左上角的ESC鍵,再按一下F10鍵,再一次按Y,意思就是保存設置並退出BIOS
4、電腦保存上一部BIOS設置後會自動重啟,然後會出現3個選項(有的不出現),此時進入純DOS
5、現在我不知道你的分區是多少個,光碟機又是什麼符盤,假設你的硬碟是CDEF,光碟機是G,現在輸入「H:」回車,打「dir」,這是讀盤命令,應該會出現很多,其中有一個「format」,此時你打「format c: /q」回車,「Y」回車~~~~開始格式化你的C盤!(輸入H:那裡依次類推,假如你光碟機是H,那就輸I:)
6、格式化完後,它要求輸入卷標,其實就是叫你給你已經格式化的C盤取一個名字,此時只需要按回車即可
7、插入WINXP的盤,CTRL+ALT+DEL重啟電腦,此時一直按回車,然後WIN XP會自動安裝了,如果是自啟動的XP光碟就需要選「安裝XP」得選項了,然後你一直跟著提示走吧~~~~~~安好後,BIOS里的設置不需要改動,我告訴你的設置是最佳狀態。
40》怎樣重裝XP系統?
一、准備工作:
1.准備好Windows 2000簡體中文版安裝光碟,並檢查光碟機是否支持自啟動。
2.可能的情況下,在運行安裝程序前用磁碟掃描程序掃描所有硬碟檢查硬碟錯誤並進行修復,否則安裝程序運行時如檢查到有硬碟錯誤即會很麻煩。
3.用紙張記錄安裝文件的產品密匙(安裝序列號)。
4.可能的情況下,用驅動程序備份工具(如:驅動精靈 2004 V1.9 Beta.exe)將原Windows XP下的所有驅動程序備份到硬碟上(如∶F:\Drive)。最好能記下主板、網卡、顯卡等主要硬體的型號及生產廠家,預先下載驅動程序備用。
5.如果你想在安裝過程中格式化C盤或D盤(建議安裝過程中格式化C盤),請備份C盤或D盤有用的數據。
二、用光碟啟動系統:
(如果你已經知道方法請轉到下一步),重新啟動系統並把光碟機設為第一啟動盤,保存設置並重啟。將XP安裝光碟放入光碟機,重新啟動電腦。剛啟動時,當出現如下圖所示時快速按下回車鍵,否則不能啟動XP系統光碟安裝。如果你不知道具體做法請參考與這相同的-->如何進入純DOS系統:
三、安裝Windows 2000光碟自啟動後,如無意外即可見到安裝界面 ,全中文提示,「要現在安裝Windows XP,請按ENTER」,按回車鍵後,許可協議,這里沒有選擇的餘地,按「F8」這里用「向下或向上」方向鍵選擇安裝系統所用的分區,如果你已格式化C盤請選擇C分區,選擇好分區後按「Enter」鍵回車,這里對所選分區可以進行格式化,從而轉換文件系統格,或保存現有文件系統,有多種選擇的餘地,但要注意的是NTFS格式可節約磁碟空間提高安全性和減小磁碟碎片但同時存在很多問題OS和98/Me下看不到NTFS格式的分區,在這里選「用FAT文件系統格式化磁碟分區(快),按「Enter」鍵回車,格式化C盤的警告,按F鍵將准備格式化c盤,由於所選分區C的空間大於2048M(即2G),FAT文件系統不支持大於2048M的磁碟分區,所以安裝程序會用FAT32文件系統格式對C盤進行格式化,按「Enter」鍵回車,
正在格式化C分區;只有用光碟啟動或安裝啟動軟盤 啟動XP安裝程序,才能在安裝過程中提供格式化分區選項;如果用MS-DOS啟動盤啟動進入DOS下,運行i386\winnt進行安裝XP時,安裝XP時沒有格式化分區選項。格式化C分區完成後,
開始復制文件,文件復制完後,安裝程序開始初始化Windows配置。然後系統將會自動在15秒後重新啟動。重新啟動後,過5分鍾後,當提示還需33分鍾時將
區域和語言設置選用默認值就可以了,直接點「下一步」按鈕,
這里輸入你想好的姓名和單位,這里的姓名是你以後注冊的用戶名,點「下一步」按鈕,
如果你沒有預先記下產品密鑰(安裝序列號)就大件事啦!這里輸入安裝序列號,點「下一步」按鈕,出安裝程序自動為你創建又長又難看的計算機名稱,自己可任意更改,輸入兩次系統管理員密碼,請記住這個密碼,Administrator系統管理員在系統中具有最高許可權,平時登陸系統不需要這個帳號。接著點「下一步」日期和時間設置不用講,選北京時間,點「下一步」開始安裝,復制系統文件、安裝網路系統,
讓你選擇網路安裝所用的方式,選典型設置點「下一步」點「下一步」
繼續安裝,到這里後就不用你參與了,安裝程序會自動完成全過程。安裝完成後自動重新啟動,出現啟動畫面,第一次啟動需要較長時間,請耐心等候,接下來是歡迎使用畫面,提示設置系統,
點擊右下角的「下一步」按鈕,出現設置上網連接畫面,這里建立的寬頻撥號連接,不會在桌面上建立撥號連接快捷方式,且默認的撥號連接名稱為「我的ISP」(自定義除外);進入桌面後通過連接向導建立的寬頻撥號連接,在桌面上會建立撥號連接快捷方式,且默認的撥號連接名稱為「寬頻連接」(自定義除外)。如果你不想在這里建立寬頻撥號連接,請點擊「跳過」按鈕。
在這里我先創建一個寬頻連接,選第一項「數字用戶線(ADSL)或電纜數據機」,點擊「下一步」按鈕,
目前使用的電信或聯通(ADSL)住宅用戶都有帳號和密碼的,所以我選「是,我使用用戶名和密碼連接」,點擊「下一步」按鈕,輸入電信或聯通提供的帳號和密碼,在「你的ISP的服務名」處輸入你喜歡的名稱,該名稱作為撥號連接快捷菜單的名稱,如果留空系統會自動創建名為「我的ISP」作為該連接的名稱,點擊「下一步」按鈕,已經建立了撥號連接,微軟當然想你現在就激活XP啦,不過即使不激活也有30天的試用期,又何必急呢?選擇「否,請等候幾天提醒我」,點擊「下一步」按鈕,
輸入一個你平時用來登陸計算機的用戶名,點下一步
點擊完成,就結束安裝。系統將注銷並重新以新用戶身份登陸。登陸桌面後如下圖27
看到了藍天白雲的畫面,你就知道是什麼回事。可是桌面上就只有回收站一個圖標。想找回常見的圖標請看下面。
六、找回常見的圖標
在桌面上點開始-->連接到-->寬頻連接,
左鍵點「寬頻連接」不放手,將其拖到桌面空白處,可見到桌面上多了一個「寬頻連接」快捷方式。
然後,右鍵在桌面空白處點擊,在彈出的菜單中選「屬性」,即打開顯示「屬性窗口」
單擊「桌面」選項卡,
在左下部點擊「自定義桌面」按鈕,
在上部,將「我的文檔」、「我的電腦」、「網上鄰居」和「Internet Explorer」四個項目前面的空格上打鉤,然後點「確定」,再「確定」,你將會看到桌面上多了你想要的圖標。
有關其它方面的功能的設置方法請參考-->功能設置 --->點擊這里查看XP全面優化指南

你按照以下步驟試試:
1.如果你的電腦現在是光碟啟動,那這一項可以跳過了:在開機時候,第一個畫面,檢測硬體設備時候,按下del鍵,進入coms設置,如果是Award的bios選第二項,找到一個叫做 first boot device 的選項,按pagedown或pageup鍵,或者加減號鍵,來選擇,找到CDROM選項,然後按ESC,按下f10鍵,保存你的更改,重新啟動。如果你不是Award bios那就另說了。如果是AMI bios,進入bios之後按右方向鍵,第四項,然後選擇同樣的類似first boot device 的選項,然後按F10保存更改退出。
2 將系統安裝盤放入光碟機,出現:press anykey to boot from CDROM……按任意鍵,進入安裝界面!
3 選擇你要安裝的分區。如果你是新硬碟沒有分區,你可以創建分區了,如果你有分區,選擇任意一個分區都可以,當然最好是選擇C盤,這時候選擇enter吧,安裝全新的操作系統,然後選擇格式化這個分區!這時候注意,windows2000以上都要至少安裝在超過2G的分區啊!還要確保你的分區是完好的。
4。格式化分區。(如果你要保留你的文件的話,選擇保持文件系統無變化好了!希望你能保持良好的習慣,自己的文件不要存在系統盤下,不要用windows提供的我的文檔我的圖片收藏之類,因為等你要重裝系統時候會很麻煩。不幸如果你已經有文件在那裡,你最好先把他們移到別的分區里,因為裝系統補用把所以分區都格式化的,放到別的分區就放心了!)這一步安裝過程會有提示,如果使用windows2000以上系統,如xp或2003,建議你選擇用ntfs格式格式化硬碟!
5,安裝過程暫時可以不用你管了,等待就可以了。它在復制文件哦!
6。重啟了,還會出現:press anykey to boot from CDROM……這時候不要在按任意鍵了啊,否則你要重復一次了。呵呵
7,進入windows環境的安裝部分了。
8,按提示輸入你的信息,如:安裝序列號,地域和語音,是否設置網路組等。
9,重啟了,快進入你熟悉的windows了,設置用戶。。(只有xp才有這個選項。)激活系統。
10。ok,系統裝完了,該裝驅動了,建議安裝順序如下:主板驅動(雖然不裝xp也能工作)-- 顯卡---音效卡---其他(這都要看你是不是主板集成了音效卡顯卡啊)如果你的驅動都不是自啟動光碟,沒關系,xp啟動時候會告訴你發現新硬體了,安裝時候選擇讓它自己搜索,在搜索中包括光碟位置(或者你知道驅動在那個文件夾存著),就可以安裝了。或者你到設備管理器找到那些還是問號的硬體,一個個安裝驅動程序吧。
11.恭喜!安裝完成了。
祝你好運!

㈡ 求一個數是幾位數的C語言程序

inta;
scanf("%d",&a);
intsum=0;//a的位數
if(!a)
sum=1;//0的位數是1
while(a){
a/=10;
++sum;
}
printf("%d",sum);

㈢ C語言中的幾個小問題

rectype是你定義的什麼類型啊,沒有這個關鍵字,你也沒定義是不合法的,
void bubble_sort (r) 這個r要定義一下,是什麼類型的,然後你的rectype r[];
不能放在void bubble_sort (r)的後面呀,而且也沒有括弧包著,不行啊~~~看你定義的像一個全局數組,那麼要放在最前面就好了~~

㈣ 如何C語言與匯編混編

c語言可以嵌套匯編:
按照TC2.0的幫助系統所以說的,在TC2.0下是可以用匯編的,方法是使用asm關鍵字:其格式是:
asm opcode <operands> <;newline>,如同別的注釋一樣,<>之間的表示可選的;例如:

main()
{
char *c="hello,world/n/r$";
asm mov ah,9;asm mov dx,c;asm int 33;
printf("You sucessed!/n");

}
或者是:

main()
{
char *c="hello,world/n/r$";
asm mov ah,9
asm mov dx,c
asm int 33
printf("You sucessed!");
}
兩種格式其實是一種.如果你用的是第一種的樣式,記住:
每一句匯編語句都要以asm開頭,如果一行內有多個句子,
那麼千萬不要忘記在兩個句子之間的這個semicolon(分號),
但是最後一句匯編後面(如果後面沒有其它的語句)的分號可有可無,象第一個例子中的
asm int 33;後面的分號就可以不要,因為它的後面沒有其它
的語句了.但如果是這樣:
asm mov ah,9; asm mov dx,c;asm int 33; printf("You sucessed!");
那麼asm int 33;後面的分號便還是留下好,以免出現編譯錯誤!
在這一點上頗象C語言.

還有一種格式是
asm{ assembly language statement},這種格式應該被普遍的歡迎.
它們的例子如下(其中的語句排列格式與上面兩種相同):
asm{
mov ax,var1
add ax,var2
......
}
但是要注意這種格式TC2.0是不支持的!
只有後來的TC++3.0及後來的IDE支持!

工具的使用:
一旦你的C源文件里包括了這些好東西,則必須用TCC.EXE的COMMAND-LINE來編譯,具體的命令參數TCC.EXE已經提供,這里不復闡述了.最簡單的是:TCC C源文件名(使用這個方法,TCC會自動調用TASM.EXE和TLINK.EXE,並且能夠使TLINK.EXE正確的找到需要的.obj和.lib文件,如果你單步編譯的話,可能會碰到很多的問題,主要是TLINK.EXE它自己並不會去找.obj和.lib文件,你自己可以建一個.bat文件,如果要指定.lib文件的目錄的話可以用/L參數,在文章的後面有一個例子).但大家要注意了,看一下你的TC目錄下面到底是否有TASM.EXE文件,並在TURBOC.CFG(這個文件包括TCC.EXE運行期參數,這裡面所有參數在運很期都將被自動TCC.EXE使用,例如:-IH:/TC/INCLUDE/
-LH:/TC/LIB/)文件中設置好一些參數,並確認TASM.EXE的版本號要2.0以上,以及是否能夠向下兼容.但是在大多數的情況下TC的目錄是沒有TASM.EXE的,或是版本不正常.
如果你有TASM.EXE文件並且TURBOC.CFG文件也已經寫好了,但是還要注意一個
問題:運行TCC.EXE時要在獨立的DOS SHELL下面(不要害怕,這不是一個新東西,我的意思
是,不在諸如TC下的DOS SHELL下面運行,我曾經敗在這個問題下,當我發現時直想揍電腦
一頓,還好沒有,不然就沒有這篇文件了.)
還有一句重要的話:TC2.0支持大部分8086指令(當然用法有一些約定,不過現在我並不打算
進行詳細說明,因為那是一件很繁雜的事,以後有時間或許會寫出來----如果大家需要的話).
如果說上面我所說的那些約定很繁雜的話,那麼下面的方法該是多麼簡單啊!
讓我們使用Borland為TC2.0內建的變數來進行偽匯編.
或許你還不知道在TC2.0中還有一些內建的pseudo寄存器(可以看作是register 型的變數,但是它們比register型的變數好用的多)
_AX,_AH,_AL,
_BX,_BH,_BL,
_CX,_CH,_CL,
_DX,_DH,_DL,
_DI,_SI,_SP,
_CS,_DS,_ES,_SS
注意這些寄存器的size,_AX,_BX,_CX,_DX,_CS,_DS,_ES,_SS,_SI,_DI,_SP等都是16位的寄存器相當於C語言的unsigned int類型,其餘的都是8位的寄存器(相當於unsigned char)(TC怎麼可能支持32位的寄存呢,所以EAX等是不能用的,FS,GS和IP寄存器都是無效的),還有就是在傳遞參數的時候千萬不要忘記使用強制類型轉換.
中斷調用指令是:__int__(interrupt_#)(注意int的前輟和後輟都是兩個underscores)
For example:
#include<dos.h>
unsigned int _stklen=0x200;
unsigned int _heaplen=0;

main()
{
_DX=(unsigned int)"Hello,world./r/n$";
_AX=0x900;
__int__(0x21);

}
dos.h它是包含__int__()內建中斷調用語句的頭文件,因此是不可
缺少的._stklen和_heaplen是定義運行期堆棧和堆大小的兩個內部
引用變數(這是個我自己想的名詞,意指如果這兩個變數在源文件中
顯式的聲明了,那麼編譯程序會自會引用來構造編譯時期的信息以產生
用戶希望的目標文件,如果不顯式的聲明則編譯程序自動確定).
這兩個變數也有一些約定,如果_stklen不顯式聲明,_heaplen賦值為零
都表示棧和堆都是defult的.
最後在TC2.0中還有一個沒有說明的標志位寄存器flags,它也是內建
pseudo寄存器是:_FLAGS,是一個16位寄存器.這些內建的寄存器都可以進行
運算,但是要注意它們所代表的類型(必要時進行類型轉換);
看起來這是不是一種好的辦法啊(而且使用這種方法只要用個一個dos.h頭文件就好,
不需要用TCC編譯,可以直接在TC20的IDE下編譯).
TC2.0中也提供了一些簡單好用的函數來實現對DOS功能的調用如:
int86(...),int86x(...)(但是這些方法實際仍然要調用函數,所以不如使用
偽寄存器,又因為要牽涉到union REGS結構的內存分配所以系統的開銷是增大了,
而使用偽寄存器是最簡潔的),埠通信函數如:inportb(...),inport(...),
outportb(...),outport(...),指針轉換函數:FP_OFF,FP_SEG,MK_FP,這些函數在
幫助系統中都有,有用時大家可以查閱.

tlinkbat.bat的例子:
rem The lib environment variable is the directory of the .obj and .lib file
set lib=h:/tc/lib/
rem 這下面的句子中的c0s(C 零S)是一個.OBJ文件,是一個C程序的STARTUP文件
tlink %lib%c0s %1,%1,%1,/L%lib%emu.lib %lib%maths.lib %lib%cs.lib
set lib=
(使用時可將以rem開頭的句子刪除)

___________________________________________________
一些約定:
我們先說一下在TC20下寫匯編(內聯匯編--自己起的名字,大家可以想叫什麼叫什麼)時的編譯器的編譯原則:
1.所有在main()函數外的的匯編語言的語句都作為數據聲明語句處理,也即在編譯器編譯時會將它放在數據段中,如:
asm string1 db "Hello",,,'world!',0ah,0xd,"$"
main()
{
asm mov dx,offset string1
asm mov ah,9
asm int 33
asm mov dx,offset string2
asm int 33
}
asm string2 db "the string can be declared after the main() function!$"
象這些樣子在main()外面的匯編語言的數據定義語句(事實上不管是什麼匯編語句,
只要是在main()之外,包括這個句子:asm mov ax,0x4c00),在編譯後都放在數據段中,而C語言的數據聲明語句仍按C的規則!
2.所有在main()函內的匯編語言的語句在編譯後都放在代碼段中,包括這個句子:
asm string2 db "the string can be declared after the main() function!$"
3.不要在以asm 開頭的語句中使用C語言的關鍵字,這會導致編譯階段的錯誤

那麼,根據這三條大家會得到什麼樣的結論呢?(先閉上眼想一想,你可能會由此變的
很贊賞自己,是的你應該這樣相信自己是對的!)
讓我們一起看一下這個結論:
1.根據編譯原則1得到:不可以在main()外面寫匯編命令語句(不要笑,正是與C語言相同才值得注意!),在任何地方都不要進行任何的段定義和宏定義(這是因為編譯後的形式決定的,也即:在TC20下所有的匯編格式的語句只能是,直接性的數據定義和語句指令)!
2根據編譯原則2得到:不可以在main()之內使用匯編的語句進行數據定義(同樣不要笑,
大多數人在第一次在TC20下寫匯編都會有這樣的錯誤的)
3.如同類強制類型這樣的事是不可以在以asm開頭的匯編語句中使用的
好了,天即朗,氣瞬清!這樣一說,一個大體的框架就出來了!只要遵守這個原則寫,就可避免很多莫名其妙的錯誤出現!
通俗的說:
匯編語句的數據定義放在main()外面,指令放在main()裡面.
如果你沒有更好的文檔,那麼記住我的這些話!

一些細節的問題:
在以asm開頭的內聯匯編語句中是不支持C的轉義字元的,但是用C語言聲明一個字元數組(含有轉義字元的),然後用int 33 ah=9這功能時輸出這個字元串時,其中的轉義字元是有效的(這主要是因為編譯後其內部表示形式不同造成的,自己想想會有答案的).
內聯匯編支持C的一些如數值表示,字元串聲明格式等,
如:一個十六進制的數據可以用兩種方式表示:0xa 和0ah,字元串可以是這樣:
"Hello,world!$"(如同C)也可以這樣'Hello,world!$'(用匯編自己的方式).
象C一樣你同樣要注意賦值的類型,而且要比C更嚴格(匯編從來不自己動手做
如同類型轉換啊這樣事),所以一切的事完全要你自己做好!而且你不要企圖以C的形式
做這件事,如這樣的格式 asm mov dx,(unsigned)a(a是一個這樣的東西,
char a[ ]="hello,world!";),而且這樣句子也會導致錯誤:asm mov dx,word ptr a(邏輯錯誤),不過這不是在編譯時的錯誤,而是運行期的錯誤(具體的原因自己想一想,象word label這樣的東西的運算作用和會導致的後果),你可以這樣用一個句子做"中間人"如int i=(unsigned)a;asm mov dx,i(也千萬不要用asm mov dx,(unsigned)a 這樣的句子.但是,告訴大家一個好消息,你可以用指針指向一個字元串,然後你會驚訝你竟然可以這樣:
char *p="hello,world";asm mov dx,p,然後用int 33 ah=9的功能輸出這個字元串而不會有錯誤(這也表現出指針的特點,它是一個二位元組的(TC20下)變數,含有的是一個地址,這與其指向的變數的類型是毫無關系的).
內匯匯編語句不支持->這個運算符.還有標號的問題,在最後的例子中你會年看到一些特別之處!

上面所說的只是很細小並微少的一些事(也是很常遇到的),尚有很多的細節要說,但由於本人時間有限不能一一列舉,如C的結構在內聯匯編的應用等大家可以按照其運行機理去想想一下用法;另外,由於這只是一件學習的事,所以還是大家自己學(找一下有關文檔,當然現在已經沒有什麼比較完整的了),情況會好的多,我在對內聯匯編的學習過程中領會到了不少的東西,例如編譯原理方面的知識,以及如何做會使代碼更高效,占空間最少等的方法.最後向大家推薦一種方法,在利用TCC的-S開關可以生成C源文件的匯編代碼
(或許很多的人都用過)是很好的學習材料!祝大家學有所成!

Cstarter
02-11-17

/* 由於個人的時間和能力有限,難免有錯誤和不詳細的地方,請大家見諒!
My Email:[email protected] [email protected] QQ:170594633 */
一些例子:
下面這個例子是對沈美明 溫冬嬋的
<<IBM-PC 匯編語言程序設計>>清華版第十一章程序的改寫
可直接在命令行上鍵入 tcc filename 就可以,當然你要有TASM.EXE
/*
asm mus_frep dw 330,294,262,294,3 p(330)
asm dw 3 p(294),330,392,392
asm dw 330,294,262,294,4 p(330)
asm dw 294,294,330,294,262,-1
asm mus_time dw 6 p(25),50
asm dw 2 p (25,25,50)
asm dw 12 p(25),100
*/
asm mus_frep dw 330,392,330,294,330,392,330,294,330
asm dw 330,392,330,294,262,294,330,392,294
asm dw 262,262,220,196,196,220,262,294,330,262
asm dw -1
asm mus_time dw 3 p (50),25,25,50,25,25,100
asm dw 2 p (50,50,25,25),100
asm dw 3 p (50,25,25),100

main()
{
asm jmp start
/*設置發聲的頻率,這一段在沈美明 溫冬嬋的
<<IBM-PC 匯編語言程序設計>>清華版第十一章有詳細的說明 */

sound:
asm mov al,0b6h
asm out 43h,al
asm mov dx,12h
asm mov ax,533h*896
asm div di
asm out 42h, al
asm mov al,ah
/* 這個延時是用來防止兩次IO操作的最後一次操作的錯誤,
因為CPU比匯流排的速度快很多,所以 要延時等待第一次操作完成後再進行第二次操作*/

asm mov cx,1000
delay:
asm loop delay

asm out 42h,al
asm in al,61h
asm mov ah,al
asm or al,3
asm out 61h,al

/* 使用中斷15H功能86H延時CX:DX=微秒數*/
asm mov ax,2710h
asm mul bx
asm mov cx,dx
asm mov dx,ax
asm mov ah,86h
asm int 15h /*可用__int__(0x15);代替*/

asm mov al,ah
asm out 61h,al
asm jmp add_count
/*------------------*/
start:
asm mov si,offset mus_frep
asm lea bp,mus_time
frep:
asm mov di,[si]
asm cmp di,-1
asm je end_mus
asm mov bx,[bp]
asm jmp sound
add_count: /*標號不能用匯編語言寫*/
asm add si,2
asm add bp,2
asm jmp frep
end_mus:;

}

對於上面的程序大家可用偽寄存器的方法寫一個,要容易的多!

/*一個發聲程序!(引自<<PC技術內幕>>電力版--這個版不好,不如清華版的)*/
#include"dos.h"
main()
{
static union REGS ourregs;
outportb(0x43,0xb6);
outportb(0x42,0xee);
outportb(0x42,0);
outportb(0x61,(inportb(0x61)|0x03));
ourregs.h.ah=0x86;
ourregs.x.cx=0x001e;
ourregs.x.dx=0x8480;
int86(0x15,&ourregs,&ourregs);
outportb(0x61,(inportb(0x61)&0xfc));
}

㈤ C語言中,怎樣判斷一個數組中是否有重復元素呢最好用程序實現

import org.apache.commons.lang.ArrayUtils;

public boolean isDupInArray(Object[]array){

if(ArrayUtils.isEmpty(array)==true){

return false;

}

for(Object obj:array){

if(ArrayUtils.indexOf(array,obj)!=ArrayUtils.lastIndexOf(array,obj)){

return true;

}

}

return false;

}

(5)c語言程序裡面有sm嗎擴展閱讀:

Return用法

1.含義:return表示從被調函數返回到主調函數繼續執行,返回時可附帶一個返回值,返回值可以是一個常量,變數,或是表達式。

2.作用:結束正在運行的函數,並返回函數值。

3.返回值:

計算結果表示函數執行的順利與否(-1、0)

返回值可以為各種數據類型,如:int,float,double,char,a[](數

組),*a(指針),結構或類(c++)

返回類型規定了return後面所加的量的類型,如果返回類型聲明為

void,則不需要返回值。public static void Main()//程序入口只可以聲

明為void和int的返回

{

//不需要返回值就OK

}

public static void mm()

{

return;//有些時候,在void的方法中,你需要跳出它,可以直接

用return而不能加任何量在後面

}

public static int cc()

{

return 321;//因為返回類型聲明為int,所以返回一個整數

}

public static string msmsm()

{

return「asdfhasjghdg」;//因為返回類型聲明為string,所以返回一個字

符串

}

㈥ c語言編程:輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最後一個數對換。

請輸入十個元素:
5 4 3 2 1 0 9 8 7 6
0 4 3 2 1 5 6 8 7 9
Press any key to continue

#include"stdio.h"
void input(int number[10]); //此函數向首地址為number的數組輸入10個元素
void max_min_value(int array[10]); //此函數交換array數組的對應元素
void output(int array[10]); //此函數輸出array數組的10個元素

void input(int number[10])
{
int i;
printf("請輸入十個元素:\n");
for (i=0;i<10;i++)
{
scanf("%d",&number[i]);
}
}

void max_min_value(int array[10])
{
int i,imin,imax,tmp,bg,sm;
imin = imax = array[0];
for (i=0;i<10;i++)
{
if (imax<array[i])
{
imax = array[i];
bg=i;
}
if (imin>array[i])
{
imin = array[i];
sm = i;
}
}
//最小換第一個
tmp=array[0];
array[0]=array[sm];
array[sm]=tmp;
//最大換第十個
tmp=array[9];
array[9]=array[bg];
array[bg]=tmp;
}

void output(int array[10])
{
int i;
for (i=0;i<10;i++)
{
printf("%d ",array[i]);
}
printf("\n");
}

main()
{
int number[10];
input(number);
max_min_value(number);
output(number);
return 0;
}

㈦ c語言中mod(m,n)是什麼意思

mod是取余,在C語言中表達式為m % n,即m除以n的余數。在C語言程序裡面沒有這個關鍵字或封裝函數,程序裡面可以用%代替。