|
主题 : : 实验9自已编完后有调试中有一些不明白的地方,请教高手 [待解决] |
回复[ 30次 ]
点击[ 2298次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2007-06-24 21:18 ] | |
荣誉值:5
信誉值:3
注册日期:2007-06-24 20:51 |
我在编写实验9的课件中遇到以下问题我没有看课件答案,这是我自已先编写,如果一步用g 命令直接到 mov ax,4c00h地址的话,结果就是正常的达到要求,但是如果用t命令和遇到循环后用p命令就会有些字符没有了,比如我如下的代码 如果用t和p命令调试的话,最后结果就会每一行少一个w字符,这是怎么个一会事,请高手点一下?
代码如下:
assume cs:codesg,ds:datasg,ss:stack
datasg segment
db 'welcome to masm!'
datasg ends ;1、00000010b绿色 2h ;2、00100100b绿底红字 24h
;3、01110001b 白底蓝字71h
codesg segment
start: mov ax,datasg
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov cx,16
mov si,0
mov di,0
s: mov al,[bx]
mov ah,2h ;设成绿字
mov es:720h[si],ax
mov ah,24h ;设成绿底红字
mov es:7c0h[si],ax
mov ah,71h ;设成白底蓝字
mov es:860h[si],ax
add si,2
inc bx
loop s
mov ax,4c00h
int 21h
codesg ends
end start | | |
|
|
|
|
[第13楼] [ 回复时间:2009-02-12 11:01 ] | |
荣誉值:0
信誉值:0
注册日期:2008-11-29 12:37 |
由于我的是vista系统,不支持dos全屏,所以做完了也不知道能不能实现题中要求效果,有什么不对的地方望大家指正。
ASSUME CS:code
data SEGMENT
DW 7702h,6502h,6c02h,6302h,6f02h,6d02h,6502h,2002h ;用16进制表示字符串,02表示属性
DW 7724h,6524h,6c24h,6324h,6f24h,6d24h,6524h,2024h
DW 7771h,6571h,6c71h,6371h,6f71h,6d71h,6571h,2071h
data ENDS
stack SEGMENT
DB 16 DUP(0)
stack ENDS
code SEGMENT
start:
MOV AX,data
MOV DS,AX
MOV SI,0
MOV AX,stack
MOV SS,AX
MOV SP,16
MOV DI,0720h
MOV AX,0b800h
MOV ES,AX
MOV CX,3
s0:PUSH CX
PUSH DI
MOV CX,8
s1:MOV AX,[SI]
MOV ES:[DI],AX
ADD SI,2
ADD DI,2
LOOP s1
POP DI
JMP WORD PTR ES:[DI] ;cs:ip跳转到b800:0720执行
ADD DI,00a0h ;di指向下一行的中间,也就是跳过160个字节
POP CX
LOOP s0
MOV AX,4c00h
INT 21h
code ENDS
END start | | |
|