汇编_8086作业

来源:互联网 发布:mysql update 走索引 编辑:程序博客网 时间:2024/06/05 19:51
D:/www_local/asm/test/test10.asm
assume cs:codesg,ds:datasgdatasg segmentdb 'welcome to masm!',0;以零结尾;db 4ah,71h,0cah   ;定义3重颜色datasg endscodesg segmentstart:  mov ax,datasgmov ds,axmov dh,2 ;在第8行显示mov dl,0 ;在第3列显示mov cl,71h;定义颜色mov si,0;si指向字符串;==========关联===============call show_strmov ax,4c00hint 21h   show_str:mov bx,0mov ax,0b800h;指向现存段mov es,axmov al,160;8 bitmul dh;8 bit  result in axadd bx,axmov al,2;8 bitmov ah,0mul dl;8 bit  result in axadd bx,ax;bx存放的是显示的偏移地址s:;mov bl,71h;由于cx要循环判断,所以颜色用bl记录mov cl,ds:[si];第八位存放字符串mov ch,0jcxz game_over;如果cx为0即遇到结束符号,返回;如果不为零,在指定位置显示mov byte ptr es:[bx+di],cl   ;先写asciimov byte ptr es:[bx+1+di],0cah;再写颜色属性add di,2;指向下个显示位置inc si;指向下个字符串jmp short s            game_over:retcodesg endsend start

D:/www_local/asm/test/test10_1.asm
assume cs:codesg,ss:stacksgstacksg segmentdb 16 dup(0)stacksg ends;计算1000000/10 即000f4240h  000ahcodesg segmentstart:  mov ax,stacksgmov ss,axmov sp,10h mov dx,000fh;被除数的高十六位mov ax,4240h;被除数的low十六位mov cx,000ah;十六位的除数call divdwmov ax,4c00hint 21h  divdw:  ;先要把被除数的低十六位保存计算高十六位push axmov ax,dxmov dx,0div cx;以上3句是先除高位结果dx为余数AX为商mov bx,ax;将商先缓存pop ax;将ax还原为被除数的第十六位div cx;高十六位dx是前面的余数 此时余数存放于dx 商放于axmov cx,dx;将余数转到cx中mov dx,bx;将高十六�  位除后的商放入dx�retcodesg endsend start

D:/www_local/asm/test/test8.asm
assume cs:codesgcodesg segmentmov ax,4c00hint 21hstart:  mov ax,0            s:nopnopmov si,offset s2mov ax,cs:[si]mov di,offset smov cs:[di],ax  ;上面4句实现了将s2处的机器码复制到s处替换掉nop nops0: jmp short ss1: mov ax,0FFFFhint 21hmov ax,0ffffhs2: jmp short s1   ;jmp记录着便宜距离codesg endsend start

D:/www_local/asm/test/test8_0.asm
assume cs:codesgcodesg segment    mov ax,4c00h    int 21hstart: mov ax,0                s: nop                 ;占一字节,机器码90       nop                        mov di,offset s            mov si,offset s2           mov ax,cs:[si]      ;(ax)=jmp short s1指令对应的机器码EBF6       mov cs:[di],ax      ;jmp short s1覆盖s处指令2条nop指令   s0: jmp short s         ;关键是机器码:EBF6 jmp 向上8字节   s1: mov ax,0       int 21h       mov ax,0   s2: jmp short s1              nopcodesg endsend start

D:/www_local/asm/test/test9.asm
assume cs:codesg,ds:datasg,ss:stacksgdatasg segmentdb 'welcome to masm!';16个字节db 4ah,71h,0cah   ;定义3重颜色datasg endsstacksg segmentdb 16 dup(0)stacksg endscodesg segmentstart:  mov ax,datasgmov ds,axmov ax,0b884h ;b800是duan b884h是中间哪行mov es,ax ;要写的目的mov ax,stacksgmov ss,axmov sp,10h;==========关联===============mov di,0   ;控制显示3行    每次递增a0hmov cx,3;控制显示3行flag2:push cxmov bx,0;控制写出16个字符一个字符占两个字节(ASCII和属性)mov si,0;控制读取16个字节mov cx,16flag:mov al,[si]mov byte ptr es:[bx+di].0b0h,al   ;先写asciimov al,10h[di];读取颜色mov byte ptr es:[bx+di].0b1h,al;再写颜色属性add bx,2add si,1loop flagpop cxadd di,0a0h;转到下一行 即跳过80乘以2等于160个字节loop flag2mov ax,4c00hint 21hcodesg endsend start

D:/www_local/asm/test/test9_1.asm
assume cs:codesgcodesg segmentstart:  mov ax,0b810h ;b800是第一行 现在是第二行mov ds,axmov bx,0mov byte ptr [bx],01hinc bxmov byte ptr [bx],01hinc bxmov byte ptr [bx],02hinc bxmov byte ptr [bx],02hmov ax,4c00hint 21hcodesg endsend start

d:/www_local/asm/0.asm
assume cs:abcabc segment        mov ax,1234h        mov ax,4c00h        int 21habc endsend

d:/www_local/asm/1.asm
assume cs:abcabc segment    start:    mov ax,1234hmov bx,5678hadd ax,1111hmov ax,4c00hint 21habc endsend start

d:/www_local/asm/2.asm
assume cs:abcabc segment    start:    mov ax,2hmov cx,11flag:add ax,axloop flagmov ax,4c00hint 21habc endsend start

d:/www_local/asm/3.asm
assume cs:abcabc segment    start:    mov ax,0ffffhmov ds,axmov bx,6mov dx,0mov al,[bx]mov ah,0mov cx,3flag:add dx,axloop flagmov ax,4c00hint 21habc endsend start

d:/www_local/asm/4.asm
assume cs:abcabc segment    start:    mov ax,0ffffhmov ds,axmov al,ds:[0]mov bl,ds:[1]mov cl,ds:[2]mov dl,ds:[3]mov ax,4c00hint 21habc endsend start

d:/www_local/asm/5.asm
assume cs:abcabc segment    start:    mov bx,0mov ax,0ffffhmov ds,axmov ax,0020hmov es,axmov cx,12flag:mov al,ds:[bx]mov es:[bx],alinc bxloop flagmov ax,4c00hint 21habc endsend start

d:/www_local/asm/6.asm
assume cs:abcabc segment    start:    mov bx,0mov ax,0ffffhmov ds,axmov dx,0mov cx,12flag:mov al,ds:[bx]mov ah,0add dx,axinc bxloop flagmov ax,4c00hint 21habc endsend start

d:/www_local/asm/7.asm
assume cs:abcabc segmentdw 0123H,0456H,0789H,1111H,1111H,1111H,1111H,1111H    start:    mov ax,0mov bx,0mov cx,8flag:add ax,cs:[bx]add bx,2loop flagmov ax,4c00hint 21habc endsend start

d:/www_local/asm/8.asm
assume cs:abcabc segmentdw 0123H,0456H,0789H,1111H,1111H,1111H,1111H,1111Hdw 0h,0h,0h,0h,0h,0h,0h,0h    start:    mov ax,csmov ss,axmov sp,20hmov bx,0mov cx,8flag:push cs:[bx]add bx,2loop flagmov bx,0mov cx,8flag2:pop cs:[bx]add bx,2loop flag2mov ax,4c00hint 21habc endsend start

d:/www_local/asm/9.asm
assume cs:codesg,ds:datasg,ss:stacksgdatasg segmentdw 0123H,0456H,0789H,1111H,1111H,1111H,1111H,1111Hdatasg endsstacksg segmentdw 0h,0h,0h,0h,0h,0h,0h,0hstacksg endscodesg segment    entry:    mov ax,datasgmov ds,axmov ax,stacksgmov ss,axmov sp,20hmov bx,0mov cx,8flag:push [bx]add bx,2loop flagmov bx,0mov cx,8flag2:pop [bx]add bx,2loop flag2mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/10.asm
assume cs:codesg,ds:datasg,ss:stacksgdatasg segmentdw 0123H,0456H,0789H,1111H,1111H,1111H,1111H,1111Hdatasg endsstacksg segmentdw 0h,0h,0h,0h,0h,0h,0h,0hstacksg endscodesg segment    entry:    mov ax,stacksgmov ss,axmov sp,10hmov ax,datasgmov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/11.asm
assume cs:codesg,ds:datasg,ss:stacksgdatasg segmentdw 0123H,0456Hdatasg endsstacksg segmentdw 0h,0hstacksg endscodesg segment    entry:    mov ax,stacksgmov ss,axmov sp,16hmov ax,datasgmov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/12.asm
assume cs:codesg,ds:datasg,ss:stacksgcodesg segment    entry:    mov ax,stacksgmov ss,axmov sp,16hmov ax,datasgmov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcodesg endsdatasg segmentdw 0123H,0456Hdatasg endsstacksg segmentdw 0h,0hstacksg endsend entry

D:/www_local/asm/test/131.asm
assume cs:codesga segment    db 1,2,3,4,5,6,7,8a endsb segment    db 1,2,3,4,5,6,7,8b endscc segment    db 0,0,0,0,0,0,0,0cc endscodesg segment    entry:    mov ax,amov ds,axmov ax,bmov es,axmov ax,ccmov ss,axmov bx,0mov cx,8flag:mov al,ds:[bx]mov ss:[bx],almov al,es:[bx]add ss:[bx],alinc bxloop flagmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/13.asm
assume cs:codesga segment    db 1,2,3,4,5,6,7,8a endsb segment    db 1,2,3,4,5,6,7,8b endscc segment    db 0,0,0,0,0,0,0,0cc endscodesg segment    entry:    mov ax,amov ds,axmov ax,ccmov es,axmov bx,0mov cx,8flag:mov al,ds:[bx]mov es:[bx],alinc bxloop flagmov ax,bmov ds,axmov bx,0mov cx,8flag2:mov al,ds:[bx]add es:[bx],alinc bxloop flag2mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/14.asm
assume cs:codesga segment    dw 1h,2h,3h,4h,5h,6h,7h,8ha endsb segment    dw 0h,0h,0h,0h,0h,0h,0h,0hb endscodesg segment    entry:    mov ax,bmov ss,axmov sp,10hmov ax,amov ds,axmov bx,0mov cx,8flag:push [bx]add bx,2loop flagmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/15.asm
assume cs:codesg,ds:datasgdatasg segment    db 'abcd'db '0123'datasg endscodesg segment    entry:    mov ax,datasgmov ds,axmov al,'a'mov bl,'b'mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/16.asm
assume cs:codesg,ds:datasgdatasg segment    db 'abcd'db '0123'datasg endscodesg segment    entry:    mov ax,datasgmov ds,axmov bx,0mov cx,4flag:mov al,[bx]and al,11011111bmov [bx],alinc bxloop flagmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/17.asm
assume cs:codesg,ds:datasgdatasg segment    db 'abcd'db '0123'datasg endscodesg segment    entry:    mov ax,datasgmov ds,axmov bx,0mov al,[0] ;这种写法是错误mov al,ds:[bx+1]mov al,ds:[2+bx]mov al,ds:3[bx]mov al,ds:[bx].24mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/18.asm
assume cs:codesg,ds:datasgdatasg segment    db 'abcd'db 'ABCD'datasg endscodesg segment    entry:    mov ax,datasgmov ds,axmov bx,0mov cx,5flag:mov al,0[bx]and al,11011111bmov 0[bx],almov al,5[bx]or  al,00100000bmov 5[bx],alinc bxloop flagmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/19.asm
assume cs:codesg,ds:datasgdatasg segment    db 'abcd'db '....'datasg endscodesg segment    entry:    mov ax,datasgmov ds,axmov si,0mov cx,4flag:mov al,0[si]mov 4[si],alinc siloop flagmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/20.asm
assume cs:codesg,ds:datasg,ss:stacksgcodesg segment    entry:    mov ax,datasgmov ds,axmov ax,stacksgmov ss,axmov sp,8mov bx,0mov cx,4flag:mov si,0push cxmov cx,4flag0:mov al,[bx][2+si]and al,11011111bmov [bx][2+si],alinc siloop flag0pop cxadd bx,6loop flagmov ax,4c00hint 21hcodesg endsdatasg segment    db '1.abcd'db '2.abcd'db '3.abcd'db '4.abcd'datasg endsstacksg segmentdw 0h,0h,0h,0hstacksg endsend entry

d:/www_local/asm/21.asm
assume cs:codesg,ds:datasg,ss:stacksgdatasg segment    db '1.ab'db '2.ab'datasg endsstacksg segmentdw 0h,0h,0h,0hstacksg endscodesg segment    entry:    mov ax,datasgmov ds,axmov ax,stacksgmov ss,axmov sp,8mov bx,0mov cx,2flag:mov si,0push cxmov cx,2flag0:mov al,[bx][2+si]and al,11011111bmov [bx][2+si],alinc siloop flag0pop cxadd bx,4loop flagmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/22.asm
assume cs:codesgcodesg segment    entry:    mov dx,0001hmov ax,86a1hmov bx,100div bxmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/23.asm
assume cs:codesgcodesg segment    entry:    mov ax,1001mov bl,100div blmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/24.asm
assume cs:codesg,ds:datasgdatasg segmentdd 100001dw 100dw 0hdatasg endscodesg segment    entry:    mov ax,datasgmov ds,axmov ax,ds:[0] ;put low 16bit into axmov dx,ds:[2] ;put high 16bit into dxdiv word ptr ds:[4]mov ds:[6],axmov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/25.asm
assume cs:codesg,ds:datasg,es:tabledatasg segment    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'    db '1993','1994','1995'    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226    dw 11452,14430,15257,17800   ;peoplesdatasg endstable segment    db 21 dup ('year summ ne ?? ') ;total 21 yearstable endscodesg segment    entry:    mov ax,datasgmov ds,ax ;sourcemov ax,tablemov es,ax ;产生关联;================================mov bx,0mov bp,0mov cx,21flag2:mov dx,cx;================================mov si,0  ; si=si+1bytemov cx,4 ;‘1975’flag:mov al,ds:[bx].0h[si]  ;y e a rmov es:[bp].0h[si],al  ;y e a rmov al,ds:[bx].54h[si]  ;incomemov es:[bp].5h[si],al  ;incomeadd si,1loop flag;================================add bx,4add bp,16mov cx,dxloop flag2;===============拷贝人数=================mov bx,0mov bp,0mov cx,21flag3:  mov ax,ds:0a8h[bx]  ;peoplemov es:0ah[bp],ax  ;peopleadd bx,2add bp,16loop flag3;================计算人均收入16================mov bx,0mov si,0mov bp,0mov cx,21flag4:  mov ax,ds:54h[bx]  ; lowmov dx,ds:54h[bx+2]  ; highdiv word ptr ds:0a8h[si];peoplemov es:0dh[bp],ax  ;division shangadd bx,4;income 4byteadd si,2  ;people 2byteadd bp,16;target loop flag4mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/26.asm
assume cs:codesgcodesg segment    entry:    mov ax,0jmp short sadd ax,1add ax,axs:add ax,1mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/27.asm
assume cs:codesgcodesg segment    entry:    mov ax,0;jmp near ptr sjmp far ptr sdb 256 dup(0)add ax,1add ax,axs:add ax,1mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/28.asm
assume cs:codesgcodesg segment    entry:    mov ax,0123hmov ds:[0],axmov ds:[2],4567hjmp dword ptr ds:[0];jmp near ptr s;jmp far ptr smov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/29.asm
assume cs:codesgcodesg segment    entry:    mov ax,0123hjmp short sdb 138 dup(0)s:mov ax,4567h;jmp dword ptr ds:[0];jmp near ptr s;jmp far ptr smov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/30.asm
assume cs:codesg,ss:stacksgstacksg segmentdb 16 dup(0)stacksg endscodesg segmentmov ax,4c00hint 21h    entry:    mov ax,stacksgmov ss,axmov sp,16mov ax,0push axret   ;相当于pop ipcodesg endsend entry

d:/www_local/asm/31.asm
assume cs:codesg,ss:stacksgstacksg segmentdb 16 dup(0)stacksg endscodesg segmentmov ax,4c00hint 21h    entry:    mov ax,stacksgmov ss,axmov sp,16mov ax,0push cspush axret   ;相当于pop ip     ,pop cscodesg endsend entry

d:/www_local/asm/32.asm
assume cs:codesg,ss:datasgdatasg segmentdb 16 dup(0)datasg endscodesg segment    entry:    mov ax,datasgmov ss,axmov sp,16mov word ptr ss:[0],offset smov ss:[2],cscall dword ptr ss:[0]nops:mov ax, offset ssub ax,ss:[0ch]  ;s处的偏移减去nop处的偏移mov bx,cssub bx,ss:[0eh]mov ax,4c00hint 21hcodesg endsend entry

d:/www_local/asm/33.asm
assume cs:codesg,ss:datasgdatasg segmentdw 1,2,3,4,5,6,7,8dd 8 dup(0)datasg endscodesg segment    entry:    mov ax,datasgmov ds,axmov si,0   ;读取源mov di,0;写入目的mov cx,8flag:mov bx,ds:[si]call cubemov ds:10h[di],ax;把结果放到下一组内存单元mov ds:12h[di],dxadd si,2add di,4loop flagmov ax,4c00hint 21hcube:mov ax,bxmul bxmul bxret  ;结果高16位在dx  第16位在axcodesg endsend entry

0 0