. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9,调试了3、4个小时,基本完成题目要求,还有少许不太满意  [待解决] 回复[ 7次 ]   点击[ 511次 ]  
homepaper
[帖 主]   [ 发表时间: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
tzf123456
[第1楼]   [ 回复时间:2015-08-22 01:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-08-20 14:51
怎么你这个程序在我的电脑里,运行的结果出现小问题啊,
tzf123456
[第2楼]   [ 回复时间:2015-08-22 01:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-08-20 14:51
我没法发图上去
1152659530
[第3楼]   [ 回复时间:2023-07-30 02:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
请注意!‘0’数字零加引号的机器码不为0
1152659530
[第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
代码已经过测试。
1152659530
[第5楼]   [ 回复时间:2023-07-30 02:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
回复:[第4楼]
------------------
上述代码参照帖主的思路,并能正确在屏幕上显示。
1152659530
[第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
1152659530
[第7楼]   [ 回复时间:2023-07-30 10:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
回复:[第6楼]
------------------
Optimize the code to be general
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved