鱼C论坛

 找回密码
 立即注册
查看: 2742|回复: 11

[已解决]实验九交流

[复制链接]
发表于 2017-8-12 09:37:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ds:data,ss:stack


data segment
db 'welcome to masm! ';定义显示的字符
db 02h,24h,71h        ;定义颜色


data ends

stack segment

dw 8 dup(0)

stack ends

code segment

start: mov ax,data
mov ds,ax
mov bx,0  ;suo yin yan se
mov ax,stack
mov ss,ax
mov sp,10h
mov ax, 0b872h
mov cx,3

s: push cx                           ;hang
    push ax
        push bx
        mov si,0                          ;suo yin zi fu
    mov di,0                          ; mu biao lie
        mov es,ax
        mov cx,10h
       
       
s1:         mov al,ds:[si]
     mov es :[di],al
         inc si
         add di,2                         ;fang  zi
         pop  bx
         mov ax,ds:[bx+10h]
     mov di,1
     mov es:[di],ax
     add bx,1
     add di,2                         ;fang yan  se
         loop s1
         pop ax
         add ax,0a0h
         pop cx
         loop s
        

                mov ax,4c00h
         int 21h
         


        code ends
        end start
       
       
       
       
        错误改不出来,请大神指教
       

最佳答案
2017-8-13 09:24:56
酸辣小白菜 发表于 2017-8-13 08:15
这是我那个程序运行结果,应该怎么修改程序?

捕获.PNG
我的是在DOSBOX运行的,没问题。 我百度了下你的提示,好像是说如果你的汇编连接工具与DOS窗口环境不兼容,就可能会遇到这样的错误。你可以百度看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-12 14:00:11 | 显示全部楼层
本帖最后由 丶忘却的年少o 于 2017-8-12 14:03 编辑
assume cs:code,ds:data,ss:stack


data segment 
        db 'welcome to masm!';定义显示的字符
        db 02h,24h,71h      ;定义颜色
data ends 

stack segment
        dw 8 dup(0)
stack ends 

code segment 
start:        mov ax,data 
                mov ds,ax 
                mov bx,0  
                mov ax,stack 
                mov ss,ax 
                mov sp,10h
                mov ax, 0b872h
                mov cx,3

s:                 push cx                        
                push ax 
                    push bx 
                mov si,0                          
                mov di,0                       
                mov es,ax 
                mov cx,10h
        
                pop bx                ;bx放在循环外面,否则每次都出栈把别的数据代入了
s1:                mov al,ds:[si]
                mov es:[di],al 
                inc si 
                add di,1    ;此处+1,理由见注释1            
                
                mov al,ds:[bx+10h]        ;此处为al,一个字节
                ;mov di,1         删除这条,理由见注释1                
                mov es:[di],al                ;此处也改为al
                ;add bx,1  移到loop s1后面,理由见末尾注释2
                add di,1     ;此处+1,前面已经把di定位到属性地址,+1就是ASCII地址            
                loop s1 
        
                add bx,1        
                pop ax 
                add ax,0ah        ;这个ax是给es的,段地址是要×16的,所以只要给16就好了
                pop cx 
                loop s
        
                mov ax,4c00h
                int 21h
         
code ends 
end start 

;注释1:既然你上面有di,这里就不要重复定义了,直接加1到属性地址就好
;注释2:每一句是同一个颜色的;颜色就3种,要是放循环里会出界

如果你觉得没错请点"最佳答案";如有问题可以追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-13 08:09:15 | 显示全部楼层
丶忘却的年少o 发表于 2017-8-12 14:00
如果你觉得没错请点"最佳答案";如有问题可以追问

你的代码编译不了,是我的编译器有问题还是你的代码有问题?   你成功运行了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-13 08:15:05 | 显示全部楼层
这是我那个程序运行结果,应该怎么修改程序?
TGO5%(G7LG$N%Q4{H}D85LV.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-13 09:20:17 | 显示全部楼层
assume cs:code,ds:data,ss:stack


data segment
db 'welcome to masm! ';定义显示的字符
db 02h,24h,71h        ;定义颜色


data ends

stack segment

dw 8 dup(0)

stack ends

code segment

start: mov ax,data
mov ds,ax
mov bx,0  ;suo yin yan se
mov ax,stack
mov ss,ax
mov sp,10h
mov ax, 0b872h
mov cx,3

s: push cx ;hang
    push ax
        push bx
        mov si,0;suo yin zi fu
    mov di,0; mu biao lie
        mov es,ax
        mov cx,10h
s1:         mov al,ds:[si]
     mov es :[di],al
         inc si
         add di,2;fang  zi
         loop s1
         pop  bx
         mov al,ds:[bx+10h]
         inc bx
         mov di,1
         mov cx,10h
   s2:  mov es:[di],al
   
     add di,2
         loop s2
         pop ax
         add ax,0a0h
         pop cx
         loop s
         mov ax,4c00h
         int 21h
         


        code ends
        end start
       
       
       
       
       
       

这是修改后的,用了三个循环,只显示一行字
`G1P{R`QDN5N{Y_`5SRI_$6.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-13 09:24:56 | 显示全部楼层    本楼为最佳答案   
酸辣小白菜 发表于 2017-8-13 08:15
这是我那个程序运行结果,应该怎么修改程序?

捕获.PNG
我的是在DOSBOX运行的,没问题。 我百度了下你的提示,好像是说如果你的汇编连接工具与DOS窗口环境不兼容,就可能会遇到这样的错误。你可以百度看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-13 09:50:01 | 显示全部楼层
丶忘却的年少o 发表于 2017-8-13 09:24
我的是在DOSBOX运行的,没问题。 我百度了下你的提示,好像是说如果你的汇编连接工具与DOS窗口环境不兼 ...

这个是我结果运行不出来的那个程序?    哈哈 我太高兴了 ,程序没错呗意思就是  ,谢谢  ,我是新手,蛮有成就感的  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-13 10:05:25 | 显示全部楼层
酸辣小白菜 发表于 2017-8-13 09:50
这个是我结果运行不出来的那个程序?    哈哈 我太高兴了 ,程序没错呗意思就是  ,谢谢  ,我是新手,蛮 ...

是的,我一模一样复制过来的。程序有什么不懂吗?主要还是理解它。记得点“最佳答案哦”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-13 10:10:16 | 显示全部楼层
丶忘却的年少o 发表于 2017-8-13 10:05
是的,我一模一样复制过来的。程序有什么不懂吗?主要还是理解它。记得点“最佳答案哦”

有    为什么我上面的用三个循环的程序,最后结果只有一行显示呢,你帮我看看,我就帮你最佳,嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-13 10:22:04 | 显示全部楼层
酸辣小白菜 发表于 2017-8-13 10:10
有    为什么我上面的用三个循环的程序,最后结果只有一行显示呢,你帮我看看,我就帮你最佳,嘿嘿

这个我在 add ax,oah后面写了。就是说地址是段地址×16+偏移地址对吧,你加在ax然后给es的那就是段地址了,所以它肯定会×16,会变成a0h的,就是你要的160,如果按照你写的那会变成1600(这里不懂可以看下面注释)。跑偏太多了,显示那肯定是显示的,就是不在你能看到的地方了。

注释:,懂了就不用看了,因为我语言能力不好,看了反而会跑偏!
你加了0a0h那最后就变成了b872+a0=b912,×16后地址就是b9120了,和你一开始定义的地址b8720相差了 b9120 - b8720 = a00,就是1600了,不是你想要的160了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-13 11:04:41 | 显示全部楼层
丶忘却的年少o 发表于 2017-8-13 10:22
这个我在 add ax,oah后面写了。就是说地址是段地址×16+偏移地址对吧,你加在ax然后给es的那就是段地址了 ...

噢啦,完全明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 21:52:22 | 显示全部楼层
能问下B8720h在程序中为什么能写成0B872h吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-10 06:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表