1.1机器语言1.2汇编语言1.3存储器1.4指令数据1.5存储单元1.6CPU对存储器的读写——AB DB CB1.7内存2.1 通用寄存器:14个寄存器它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW2.2 物理地址,段地址:偏移地址2.3 CS : IP2.4MOV ADD JMP3.1 内存中字的存储,字节存储3.2 DS : […..]2.5MOV ADD JMP SUB2.6DEBUG4.1 编程——编译——连接——跟踪——运行5 [bx] loop 段前缀安全的段空间循环指令的跟踪MOV ADD JMP SUB [BX] LOOP6 包含多个段的程序cs:code ds:data ss:sseg es:esegassume cs:code a segmentdb 1,2,3,4,5,6,7,8 a ends b segmentdb 1,2,3,4,5,6,7,8b endsc segmentdb 0,0,0,0,0,0,0,0c endscode segmentstart:mov ax,amov es,axmov ax,cmov ds,axmov bx,0mov cx,8s1:mov ax,es:[bx]add [bx],axadd bx,2loop s1mov ax,bmov es,axmov ds,axmov bx,0mov cx,8s2:mov ax,es:[bx]add [bx],axadd bx,2loop s2mov ax,4c00hint 21h code endsend startassume cs:codea segmentdw 1,2,3,4,5,6,7,8a endsb segmentdw 0,0,0,0,0,0,0,0 b endscode segmentstart:mov ax,bmov ss,axmov sp,10hmov ax,amov ds,axmov bx,0mov cx,8s: push [bx]add bx,2loop smov ax,4c00hint 21h code endsend start7 MOV ADD JMP SUB [BX] LOOP AND ORAsc2码字符形式给出的数据大小写转换SI, DI, [BX]以及组合assumecs:codesg,ss:stacksg,ds:d atasgstacksg segmentdw0,0,0,0,0,0,0,0stacksg endsdatasg segmentdb '1. display ' db '2. brows ' db '3. replace ' db '4. modify ' datasg ends codesg segmentstart:mov ax,stacksgmov ss,axmov sp,16mov ax,datasgmov ds,axmov bx,0mov cx,4s: ;外循环push cxmov si,3mov cx,4s0: ;内循环mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop s0add bx,16pop cxloop smov ax,4c00hint 21hcodesg endsend start8 数据处理问题,地址长度寻址方式综合运用MOV ADD JMP SUB [BX] LOOP AND OR DIV DD DW DB DUP WORD PTR BYTE PTR DIVassume cs:code ds:seg seg segmentdb 96 dup(?)db 'DEC','Ken Oslen'dw 137,40db 'PHP'seg endscode segmentstart:mov ax,segmov ds,axmov bx,60hmov word ptr [bx+0ch],38add word ptr [bx+0eh],70 mov si,0mov byte ptr [bx+10h+si],'V' inc simov byte ptr [bx+10h+si],'A' inc simov byte ptr [bx+10h+si],'X' mov ax,4c00hint 21hcode endsend start向表格中填数据,向内存中写数据assume cs:codesg,ds:data,es:table data segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';以上是表示21年的21个字符串dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示21年公司总收的21个dword型数据dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,45257,17800;以上是表示21年公司雇员人数的21个word型数据data endstable segmentdb 21 dup('year summ ne ?? ') table endscodesg segmentstart:mov ax,datamov ds,axmov ax,tablemov es,axmov bx,0mov si,0 mov di,0mov cx,2s: ;进入循环mov al,[bx]mov es:[di],almov al,[bx+1]mov es:[di+1],almov al,[bx+2]mov es:[di+2],almov al,[bx+3]mov es:[di+3],al;以上8句的作用是存放年份mov ax,54h[bx] ;第一个'年收入'的段基址为54H mov dx,56h[bx]mov es:5h[di],axmov es:7h[di],dx;以上4句的作用是存放公司总收入mov ax,0A8h[si] ;第一个'人数'的段基址为0A8H mov es:0Ah[di],ax;以上2句是存放公司的人数mov ax,54h[bx]div word ptr ds:0A8h[si]mov es:0dh[di],ax;以上3句是存放人均收入add bx,4add si,2add di,16;以上3句是为下一次循环时存放数据做准备;3个寄存器递增的速度决定了所要存取的数据的位置的偏移地址loop s ;跳到标号s处mov ax,4c00hint 21hcodesg endsend start9 MOV ADD JMP SUB [BX] LOOP AND OR DIV DD DW DB DUP WORD PTR BYTE PTR DIV offset JMP short ptr/nearptr 标号等JCXZ LOOP奇怪的返回程序assume cs:code code segment mov ax,4c00hint 21hstart:mov ax,0s:nopnopmov di,offset smov si,offset s2mov ax,cs:[si]mov cs:[di],axs0:jmp short ss1:mov ax,0int 21hmov ax,0s2:jmp short s1nopcode endsend start向显示缓冲区写数据assumecs:code,ds:data,ss:stack data segmentdb 'welcome to masm!' db 02h,24h,71h data ends stack segmentdw 8 dup(0)stack endscode segmentstart:mov ax,datamov ds,axmov ax,stackmov ss,axmov sp,10hmov bx,0mov di,0mov ax,0b872mov cx,3 ;外循环为3次,因为要显示三个字符串s3: push cx ;三个进栈操作为外循环s3保存相关寄存器的值push ax ;以防止它们的值在内循环中被破坏push dimov es,ax ;此时es为屏幕第12行中间的显存的段起始位置mov si,0mov di,0mov cx,10h ;内循环为10h次,因为一个字符串中含10h个字节s1: mov al,ds:[bx+si]mov es:[bx+di],alinc siadd di,2loop s1 ;此循环实现偶地址中存放字符mov si,1 ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备 pop di ;将di的值恢复成进入内循环之前的时候的值mov al,ds:10h[bx+di] ;取颜色属性[源OP寻址方式:相对基址变址]mov cx,10h ;第二个内循环也为10h次s2: mov es:[bx+si],aladd si,2loop s2 ;此循环实现奇地址中存放字符的颜色属性;以下4句为下一趟外循环做准备inc dipop axadd ax,0ah ;将显存的段起始地址设为当前行的下一行;[在段地址中加0ah,相当于在偏移地址中加了0a0h(=160d)] pop cxloop s3mov ax,4c00hint 21hcode endsend start10 MOV ADD JMP SUB [BX] LOOP AND OR DIV DD DW DB DUP WORD PTR BYTE PTR DIV offset JMP short ptr/nearptr 标号等JCXZ LOOP RET RETF CALL MUL参数和结果的传递:assume cs:codedata segmentdb 'conversation' data endscode segment start:mov ax,datamov ds,axmov si,0mov cx,12call captalmov ax,4c00hint 21h captal:mov al,[si]and al,11011111bmov [si],alinc siloop captalretcode endsend start编写子程序。