鱼C论坛

 找回密码
 立即注册
查看: 2342|回复: 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 编辑
  1. assume cs:code,ds:data,ss:stack


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

  6. stack segment
  7.         dw 8 dup(0)
  8. stack ends

  9. code segment
  10. start:        mov ax,data
  11.                 mov ds,ax
  12.                 mov bx,0  
  13.                 mov ax,stack
  14.                 mov ss,ax
  15.                 mov sp,10h
  16.                 mov ax, 0b872h
  17.                 mov cx,3

  18. s:                 push cx                        
  19.                 push ax
  20.                     push bx
  21.                 mov si,0                          
  22.                 mov di,0                       
  23.                 mov es,ax
  24.                 mov cx,10h
  25.         
  26.                 pop bx                ;bx放在循环外面,否则每次都出栈把别的数据代入了
  27. s1:                mov al,ds:[si]
  28.                 mov es:[di],al
  29.                 inc si
  30.                 add di,1    ;此处+1,理由见注释1            
  31.                
  32.                 mov al,ds:[bx+10h]        ;此处为al,一个字节
  33.                 ;mov di,1         删除这条,理由见注释1               
  34.                 mov es:[di],al                ;此处也改为al
  35.                 ;add bx,1  移到loop s1后面,理由见末尾注释2
  36.                 add di,1     ;此处+1,前面已经把di定位到属性地址,+1就是ASCII地址            
  37.                 loop s1
  38.         
  39.                 add bx,1       
  40.                 pop ax
  41.                 add ax,0ah        ;这个ax是给es的,段地址是要×16的,所以只要给16就好了
  42.                 pop cx
  43.                 loop s
  44.         
  45.                 mov ax,4c00h
  46.                 int 21h
  47.          
  48. code ends
  49. end start

  50. ;注释1:既然你上面有di,这里就不要重复定义了,直接加1到属性地址就好
  51. ;注释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-3-29 04:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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