. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  【实验9】出现的很奇怪的问题,大家帮忙看一下,很简单的代码  [待解决] 回复[ 3次 ]   点击[ 214次 ]  
zhouxiao
[帖 主]   [ 发表时间:2010-05-09 18:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-01 09:12
问题,就是结果字符串中welcome to masm!的w没有显示出来,很奇怪
代码如下:

assume cs:codesg,ds:data,es:table,ss:stack                

data segment                                                ;段地址为0B800h,偏移地址7c0h
        db 'welcome to masm!'                                ;16个字节
data ends

table segment
        dd 0
table ends

stack segment
        dd 0
stack ends

codesg segment
        start:        mov ax,data
                mov ds,ax
                mov ax,stack
                mov ss,ax
                mov bx,0h
                mov si,0h
                mov cx,16
                
        s:        mov ax,0b800h
                mov es,ax
                mov al,[bx]
                mov byte ptr es:[7c0h+si],al
                mov byte ptr es:[860h+si],al
                mov byte ptr es:[900h+si],al                ;先移动字符串
                mov al,2h
                mov byte ptr es:[7c1h+si],al                ;从这里开始设置字符串的颜色属性
                mov al,24h
                mov byte ptr es:[861h+si],al
                mov al,71h
                mov byte ptr es:[901h+si],al
                add si,2h
                add bx,1h
                loop s
                
                mov ax,4c00h
                int 21h
codesg ends
end start


结果出来是:

AX=B871  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=153B  ES=B800  SS=153D  CS=153E  IP=0039   NV UP EI PL NZ NA PO NC
153E:0039 26            ES:
153E:003A 88840109      MOV     [SI+0901],AL                       ES:0901=07
-t

AX=B871  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=153B  ES=B800  SS=153D  CS=153E  IP=003E   NV UP EI PL NZ NA PO NC
153E:003E 83C602        ADD     Selcome to masm!
-t                               elcome to masm!
                                 elcome to masm!
AX=B871  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0002  DI=0000
DS=153B  ES=B800  SS=153D  CS=153E  IP=0041   NV UP EI PL NZ NA PO NC
153E:0041 83C301        ADD     BX,+01
-t

AX=B871  BX=0001  CX=0010  DX=0000  SP=0000  BP=0000  SI=0002  DI=0000
DS=153B  ES=B800  SS=153D  CS=153E  IP=0044   NV UP EI PL NZ NA PO NC
153E:0044 E2CD          LOOP    0013
-p

AX=B871  BX=0010  CX=0000  DX=0000  SP=0000  BP=0000  SI=0020  DI=0000
DS=153B  ES=B800  SS=153D  CS=153E  IP=0046   NV UP EI PL NZ AC PO NC
153E:0046 B8004C        MOV     AX,4C00
-
crg007
[第1楼]   [ 回复时间:2010-05-09 19:24 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:4
注册日期:2009-07-29 23:59
你的程序没问题,若要在屏幕上显示字符串“welcome to masm!”不能使用BEDUG执行,直接输入你的文件名***.ese回车即可!
crg007
[第2楼]   [ 回复时间:2010-05-09 19:25 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:4
注册日期:2009-07-29 23:59
不好意思,更改一下:是直接输入你的文件名***.exe回车即可!
zhouxiao
[第3楼]   [ 回复时间:2010-05-09 20:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-01 09:12
非常感谢,已经将程序修改成29行的代码了,很有成就感。代码如下:
assume cs:codesg,ds:data                
data segment                                                ;段地址为0B800h,偏移地址7c0h
        db 'welcome to masm!'                                ;16个字节
data ends
codesg segment
        start:        mov ax,data
                mov ds,ax
                mov bx,0h
                mov si,0h
                mov ax,0b800h
                mov es,ax                                ;直接将段地址0b800h放进es
                mov cx,16
        s:        mov al,[bx]
                mov es:[7c0h+si],al                ;显示第一行字符串
                mov es:[860h+si],al                ;显示第二行字符串
                mov es:[900h+si],al                ;显示第三行字符串
                mov al,2h                        ;绿色
                mov es:[7c1h+si],al                ;设置第一行字符串颜色
                mov al,24h                        ;绿底红色
                mov es:[861h+si],al                ;设置第二行字符串颜色
                mov al,71h                        ;白底蓝色
                mov es:[901h+si],al                ;设置第三行字符串颜色
                add si,2h
                add bx,1h
                loop s
                mov ax,4c00h
                int 21h
codesg ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved