|
主题 : : 实验9,调试了3、4个小时,基本完成题目要求,还有少许不太满意 [待解决] |
回复[ 7次 ]
点击[ 511次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2015-06-25 21:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:12
信誉值:2
注册日期:2015-06-12 14:12 |
;思路是,自动计算出显示字符居中,想显示其它内容,只要在前面修改即可。当然,想修改显示效果,也可以直接在前面修改
assume cs:code
text segment
db 'Welcome to masm!',0
db 00000010b,00100100b,01110001b
;定义绿色、绿底红字、白底蓝字3个属性
text ends
code segment
start:
mov ax,text
mov ds,ax
mov ax,0b800h
mov ss,ax ;初始化
mov bx,0
s:
mov cl,[bx]
mov ch,0h
jcxz onset
inc bx
loop s ;取得要显示的字符个数
onset:
mov ax,0a0h
sub ax,bx
mov di,bx ;保存字符个数到di
mov bl,2h
div bl ;计算出居中排列时字符的起始列地址
mov si,ax ;保存起始列地址至si
mov cx,3
mov ax,25
sub ax,cx
mov bx,2h
div bl ;计算出居中排列时字符的起始行
mov bp,ax ;保存起始行至bp
mov cx,bp
mov bp,0
s0:
add bp,0a0h
loop s0 ;计算起始行地址至bp
mov bx,0
mov cx,3 ;设置显示字符行数
;mov di,0 ;设置字符属性起始地址
s1:
mov dx,cx ;保存外循环次数
mov sp,si ;保存起始列地址
mov cx,di ;设置内循环次数=字符个数
s2:
mov ah,ds:1[di] ;复制字符属性
mov byte ptr 1h[bp][si],ah ;输出字符属性
mov al,[bx] ;复制字符
mov [bp][si],al ;输出显示字符
inc bx
add si,2
loop s2
inc di
add bp,0a0h
mov cx,dx
mov si,sp
mov bx,0
loop s1
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2015-08-22 01:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2015-08-20 14:51 |
怎么你这个程序在我的电脑里,运行的结果出现小问题啊, | | |
|
|
|
|
[第2楼]
[ 回复时间:2015-08-22 01:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2015-08-20 14:51 |
|
|
|
|
|
[第3楼]
[ 回复时间:2023-07-30 02:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13 |
|
|
|
|
|
[第4楼]
[ 回复时间:2023-07-30 02:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13 |
assume ds:data,cs:code,ss:stack
data segment
db 'welcome to masm!',0
db 00000010b,00100100b,01110001b
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
s0: mov cl,[bx]
mov ch,0
jcxz s1
inc bx
loop s0
s1:mov ax,0a0h
mov dx,bx
add bx,bx
sub ax,bx
mov bl,2h
div bl
mov ah,0
mov si,ax
mov ax,25
mov cx,3
sub ax,cx
div bl
mov ah,0
mov di,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0b800h
mov es,ax
mov bx,0
mov bp,0
mov cx,di
s2:
add bp,0a0h
loop s2
mov di,0
mov cx,3
s3:
push cx
push si
mov cx,dx
s4:
mov ax,0
mov al,[bx]
mov ah,ds:[di+17]
mov es:[bp+si],ax
inc bx
add si,2
loop s4
mov bx,0
pop si
inc di
add bp,0a0h
pop cx
loop s3
mov ax,4c00h
int 21h
code ends
end start
代码已经过测试。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2023-07-30 02:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13 |
回复:[第4楼]
------------------
上述代码参照帖主的思路,并能正确在屏幕上显示。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2023-07-30 10:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13 |
敏感词原因,用here标记行数
assume ds:data,cs:code,ss:stack
data segment
db 'welcome to masm!',0
db 00000010b,00100100b,01110001b
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
s0: mov cl,[bx]
mov ch,0
jcxz s1
inc bx
loop s0
s1:mov ax,0a0h
mov dx,bx
add bx,bx
sub ax,bx
mov bl,2h
div bl
mov ah,0
mov si,ax
mov ax,25
mov cx,3
sub ax,cx
div bl
mov ah,0
mov di,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0b800h
mov es,ax
mov bx,0
mov bp,0
mov cx,di
s2:
add bp,0a0h
loop s2
mov di,dx
add di,1
mov cx,3
s3:
push cx
push si
mov cx,dx
s4:
mov ax,0
mov al,[bx]
mov ah,ds:[di] //here
mov es:[bp+si],ax
inc bx
add si,2
loop s4
mov bx,0
pop si
inc di
add bp,0a0h
pop cx
loop s3
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第7楼]
[ 回复时间:2023-07-30 10:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13 |
回复:[第6楼]
------------------
Optimize the code to be general | | |
|