第九章实验九

    技术2022-05-11  35

    题目:编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'

    分析:根据书上的背景知识,我们知道绿色 对应的属性字节是0000 0010即02h,绿底红色的属性字节是0010 0100即24h,白底蓝色的属性字节是0111 0001即71h。第二是计算屏幕中央的行数和列数的值,我们从材料了解到实验用到的是80*25彩色字符模式,其显示器可以显示25行,每行80个字符,而一个字符在现实缓冲区中占用两个字节,低字节存放字符的ascii码,高位字节存放属性字节。总共25行,我们会用到11、12、13这几行,第11行的开始地址为:06e0。所以每行有160个字节,这点很重要,我就因为把他当做了80个字节,导致最后的定位总是没有定位到屏幕中央。而字符串'welcome to masm'总共占用了24个字28个字节。用160减去28后为132,要放在正中央,就把132除以二的61,所以会先空出61个字符,但是要求偶数单元存放字符的axcii码,所以从我们空出32个字,即要偏移40h。把06e0加上40h就是0720h。12行的开始存放字符的单元相应的加上0a0h就行了。13行的加上2个0a0。到这里准备工作就做好了

    源代码如下:

    assume cs:codesg datasg segment db 'welcome to masm!' datasg ends codesg segment start: mov ax,datasg mov es,ax mov ax,0b800h mov ds,ax mov bx,0720h ;设置中间行中间列的首地址 mov si,0 mov cx,16 s:mov ax,es:[si] ;设置绿色字体 mov ah,02h mov word ptr ds:[bx],ax; ;设置绿底红色 mov ah,24h mov word ptr ds:[bx+0a0h],ax ;设置白底蓝色 mov ah,71h mov word ptr ds:[bx+0a0h+0a0h],ax inc si;加一取下一个字符 add bx,2;加2跳过奇数单元地址 loop s mov ax,4c00h int 21h codesg ends end start

    调试过程:

    -r AX=0000 BX=0000 CX=0041 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B75 ES=0B75 SS=0B85 CS=0B86 IP=0000 NV UP EI PL NZ NA PO NC 0B86:0000 B8850B MOV AX,0B85 -u 0B86:0000 B8850B MOV AX,0B85 0B86:0003 8EC0 MOV ES,AX 0B86:0005 B800B8 MOV AX,B800 0B86:0008 8ED8 MOV DS,AX 0B86:000A BB2007 MOV BX,0720 0B86:000D BE0000 MOV SI,0000 0B86:0010 B91000 MOV CX,0010 0B86:0013 26 ES: 0B86:0014 8A04 MOV AL,[SI] 0B86:0016 B402 MOV AH,02 0B86:0018 8907 MOV [BX],AX 0B86:001A B424 MOV AH,24 0B86:001C 8987A000 MOV [BX+00A0],AX -t AX=0B85 BX=0000 CX=0041 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B75 ES=0B75 SS=0B85 CS=0B86 IP=0003 NV UP EI PL NZ NA PO NC 0B86:0003 8EC0 MOV ES,AX -p AX=0B85 BX=0000 CX=0041 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B75 ES=0B85 SS=0B85 CS=0B86 IP=0005 NV UP EI PL NZ NA PO NC 0B86:0005 B800B8 MOV AX,B800 -p AX=B800 BX=0000 CX=0041 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B75 ES=0B85 SS=0B85 CS=0B86 IP=0008 NV UP EI PL NZ NA PO NC 0B86:0008 8ED8 MOV DS,AX -p AX=B800 BX=0000 CX=0041 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=000A NV UP EI PL NZ NA PO NC 0B86:000A BB2007 MOV BX,0720 -p AX=B800 BX=0720 CX=0041 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=000D NV UP EI PL NZ NA PO NC 0B86:000D BE0000 MOV SI,0000 -p AX=B800 BX=0720 CX=0041 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0010 NV UP EI PL NZ NA PO NC 0B86:0010 B91000 MOV CX,0010 -p AX=B800 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0013 NV UP EI PL NZ NA PO NC 0B86:0013 26 ES: 0B86:0014 8A04 MOV AL,[SI] ES:0000=77 -p AX=B877 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0016 NV UP EI PL NZ NA PO NC 0B86:0016 B402 MOV AH,02 -p AX=0277 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0018 NV UP EI PL NZ NA PO NC 0B86:0018 8907 MOV [BX],AX DS:0720=0720 -p AX=0277 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=001A NV UP EI PL NZ NA PO NC 0B86:001A B424 MOV AH,24 -p AX=2477 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=001C NV UP EI PL NZ NA PO NC 0B86:001C 8987A000 MOV [BX+00A0],AX DS:07C0=0720 -p AX=2477 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0020 NV UP EI PL NZ NA PO NC 0B86:0020 B471 MOV AH,71 -p AX=7177 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0022 NV UP EI PL NZ NA PO NC 0B86:0022 89874001 MOV [BX+0140],AX DS:0860=0720 -p AX=7177 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0026 NV UP EI PL NZ NA PO NC 0B86:0026 46 INC SI -p AX=7177 BX=0720 CX=0010 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=0027 NV UP EI PL NZ NA PO NC 0B86:0027 83C302 ADD BX,+02 -p AX=7177 BX=0722 CX=0010 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=002A NV UP EI PL NZ NA PE NC 0B86:002A E2E7 LOOP 0013 -p AX=7121 BX=0740 CX=0000 DX=0000 SP=0000 BP=0000 SI=0010 DI=0000 DS=B800 ES=0B85 SS=0B85 CS=0B86 IP=002C NV UP EI PL NZ AC PO NC 0B86:002C B8004C MOV AX,4C00 -

    结果截图:


    最新回复(0)