|
主题 : : 实验十 第一题 [待解决] |
回复[ 2次 ]
点击[ 294次 ] | |
荣誉值:0
信誉值:0
注册日期:2009-07-10 14:13 |
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:mov ax,0b800h
mov es,ax
mov ax,0a0h :计算位置,8位乘法
mul dh
add al,dl
mov bx,ax
mov al,cl
mov ch,0
s:mov cl,[si]
jcxz ok
mov es:[bx],cl
mov es:[bx+1],al
add bx,2
inc si,1
jmp s
ok:ret
code ends
end start
这段程序显示位置正确,可是显示的是乱码
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:mov ax,0b800h
mov es,ax
mov ax,0a0h 计算位置,16位乘法
mov bl,dh
mov bh,0
mul bx
add al,dl
mov bx,ax
mov al,cl
mov ch,0
s:mov cl,[si]
jcxz ok
mov es:[bx],cl
mov es:[bx+1],al
add bx,2
inc si,1
jmp s
ok:ret
code ends
end start
而这段程序可以正确显示,行数正确而列数不正确(这段程序用的16位乘法,覆盖了DL中的数据),两段程序在输入字母及颜色时并没不同,不同之处只是在计算显示的位置,想不通为什么(仅仅是计算位置时的不同,按说不应该导致一个可以正确输入字符颜色,而另一个不能)
另外还有个乘法的问题
-r
AX=0000 BX=A000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AF0 ES=0AF0 SS=0AF0 CS=1000 IP=0000 NV UP EI PL NZ NA PO NC
1000:0000 B408 MOV AH,08
-t
AX=0800 BX=A000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AF0 ES=0AF0 SS=0AF0 CS=1000 IP=0002 NV UP EI PL NZ NA PO NC
1000:0002 B7A0 MOV BH,A0
-t
AX=0800 BX=A000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AF0 ES=0AF0 SS=0AF0 CS=1000 IP=0004 NV UP EI PL NZ NA PO NC
1000:0004 F6E7 MUL BH
-t
AX=0000 BX=A000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AF0 ES=0AF0 SS=0AF0 CS=1000 IP=0006 NV UP EI PL NZ NA PO NC
1000:0006 0000 ADD [BX+SI],AL DS:A000=00
最终ax=0000,很是想不通,用的明明是8位乘法,望高手解惑 | | |