微机原理刚学汇编 写汇编程序时毫无头绪 比如不知道怎么样开头 像c语言之类的都有固定头文件啥的 汇 建议如下:工欲善其事,2113必先利其器5261,软件先安好。现在学4102习的汇编一般都是165316位的,而PC一般都是是x86或者x64,16位的程序是没法直接运行的,所以需要安装虚拟的运行环境,推荐使用DOSBox,用来运行你编写的汇编代码编译后生成的16位exe的程序。当然代码编辑器的话,推荐用Notepad+。顺便说一下,DOSBox安装之后还需要一些配置,还要添加masm.exe,link.exe等程序,配置难度适中,如果不会配置,请给我发私信(因为联系方式此处不便透露)。汇编代码其实不难,关键是入门时,也要遵循一定的语法,这里是一个hello world的例子(运行是可以的,不用怀疑):data segmentstr_1 db 'hello world。','$';定义一个字符串,以$结束data endscode segmentmain proc farassume cs:code,ds:datastart:push dssub ax,ax;相当于 mov ax,0hpush axmov ax,datamov ds,axlea dx,str_1mov ah,9hint 21hretmain endpcode endsend start对于这段代码,没有堆栈段(因为用不上),编译会警告没有堆栈段,但是不影响。这段代码算是一个典型的汇编代码的例子了吧,汇编代码的结构差不多就这样,多是先要有数据段,代码段等的定义,然后是assume将数据段与ds,。
微机原理 汇编语言 data segmentbuf1 db 1,3,4,5,7,9n1 equ$-buf1buf2 db 2,4,6,8,10,12n2 equ$-buf2buf3 db n1+n2 dup(0)data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea si,buf1lea di,buf2lea bx,buf3mov cx,0;ch->;index for buf1cl->;index for buf21:cmp ch,n1jz$8cmp cl,n2jz$9mov al,[si]cmp al,[di]ja$2jb$3mov[bx],alinc bxinc siinc diinc chinc cljmp$12:mov al,[di]mov[bx],alinc clinc bxinc dijmp$13:mov[bx],alinc chinc bxinc sijmp$18:cmp cl,n2jz$10mov al,[di]mov[bx],alinc bxinc diinc cljmp$89:cmp ch,n1jz$10mov al,[si]mov[bx],alinc siinc bxinc chjmp$910:mov ah,4chint 21hcode endsend start
汇编语言--微机原理 ;本程序通过编译,运行正确Code SegmentAssume CS:Code,DS:Code功能:显示指定地址(Str_Addr)的字符串入口:Str_Addr=字符串地址(要求在数据段)用法:Output Str_Addr用法举例:Output PromptStrOutput MACRO Str_Addrlea dx,Str_Addrmov ah,9int 21hEndM功能:输出回车换行Output_CTLF proc Nearpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axretOutput_CTLF endpPrompt_Num db 'input number(0-9):$'Prompt_Err db 'error$'Start:push cspop ds;使数据段与代码段同段Input_Num:Output Prompt_Num;提示输入数字mov ah,1int 21hcmp al,'0'jb@Errorcmp al,'9'ja@Errorcall Output_CTLFmov dl,almov ah,2int 21hExit_Proc:mov ah,4ch;结束程序int 21hError:call Output_CTLFOutput Prompt_Err;提示输入错误call Output_CTLFjmp Input_NumCode ENDSEND Start;编译到此结束