. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验10.1,显示字符串。  [待解决] 回复[ 2次 ]   点击[ 308次 ]  
chengdudefengche
[帖 主]   [ 发表时间:2011-05-19 18:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-05-11 17:26
ASSUME    CS:CODE
        DATA  SEGMENT
              DB        'Welcome to masm!',0
        DATA  ENDS

        CODE  SEGMENT
        
      START:  MOV       DH,8
              MOV       DL,3
              MOV       CL,2

              MOV       AX,DATA
              MOV       DS,AX
              MOV       SI,0

              CALL      SHOW_STR

              MOV       AX,4C00H
              INT       21H

   SHOW_STR:                        ;这个子程序是显示字符串的(80*25模式下)还没有做用到的寄存器做保护,用的时候注意下
                                    ;DH传送行数,DL传送列数,CL传送字符属性,DS:SI 传送字符首地址,
                                    ;还没有做用到的寄存器做保护,用的时候注意下
                                     
              MOV       AX,0        ;这里是将显存的段地址传送给 es  ,(也就是行地址)  用 AX 传送
              MOV       AL,0A0H
              MUL       DH
              ADD       AX,0B800H
              MOV       ES,AX

              MOV       AH,2        ;这里是传送列地址给 di    ,    用 AX 传送
              MOV       AL,DL
              MUL       AH
              MOV       DI,AX

              MOV       AL,CL       ;将字符属性传送给  AL

          S:  MOV       AH,DS:[SI]  ;将字符传送给 AH
              MOV       ES:[DI],AX  ;将 (字符+属性) 的 AX 传送给显示的地方
              MOV       DX,0        ;设置 DX 值为0,为下面检测最后一个值为 0 做准备
              MOV       DL,AH       ;将每个字符传送给 DH ,相当于传送给 DX
              MOV       CX,DX       ;将 DX 传送给CX,以检测
              JCXZ      OK
              INC       SI          ; SI 加 1
              ADD       DI,2        ; DI 加 2
              JMP       SHORT S
               
         OK:  RET
         
        CODE  ENDS
              END       START
593357681
[第1楼]   [ 回复时间:2011-12-27 10:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-12-15 17:59
楼主很强啊
chinatree
[第2楼]   [ 回复时间:2011-12-28 01:08 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
唉,不知道楼主怎么想的,难道
              MOV       AX,0      
              MOV       AL,0A0H 
              MUL       DH 
              ADD       AX,0B800H 
              MOV       ES,AX 
没有发现什么吗?不除16就直接加上b800给了es,我想楼主根本就没编译连接运行,进行验证吧?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved