. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->自由讨论区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9  [待解决] 回复[ 8次 ]   点击[ 406次 ]  
girl_lulu
[帖 主]   [ 发表时间:2010-04-23 21:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
ssume ds:data,cs:code

data segment
  db 'welcome to masm';    db定义后字节型数据存储方式
data ends

code segment
start: mov ax,data;        start的作用
         mov ds,ax
            mov ax,b800h
            mov es,ax
            
            mov bx,0
            mov di,0
            mov cx,16
            s: mov al,[bx]
                mov ah,02h
                   mov es:730h[di],ax
                   
                   mov al,[bx]
                   mov ah,24h
                   mov es:7d0h[di],ax
                   
                   mov al,[bx]
                   mov ah,71h
                   mov es:870h[di],ax
                   
                   mov di,2
                   inc bx
                   loop s
                
                mov ax,4c00h
                int 21h
code ends

end start
-------------------------------------------------------
DEBUG上编译结果:Symbol not defined: B800H————这个不明白?谢谢回答!!



Source filename [.ASM]: p1
Object filename [p1.OBJ]:
Source listing  [NUL.LST]:
Cross-reference [NUL.CRF]:
p1.ASM(10): error A2009: Symbol not defined: B800H

  50602 + 445974 Bytes symbol space free

      0 Warning Errors
      1 Severe  Errors

C:\DOCUME~1\ADMINI~1>
mess
[第1楼]   [ 回复时间:2010-04-24 22:44 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
mov ax,b800h 
-----------
字母前加0 
--》mov ax,0b800h 


举例:mov al,ah
问:后面的ah是十六进制数a,还是寄存器ah呢?
如果是ah,怎么把十六进制表示的数值a给al。
girl_lulu
[第2楼]   [ 回复时间:2010-04-26 17:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
回复:[第1楼]
------------------
一,应该是直接传送啊,  数据可以直接传给寄存器,不知道你想考我的是什么···
二,假设按你所说改为0b800h,debug结果是——内存不足,又不懂了??

=================================
更改后DEBUG上结果: 

Microsoft(R) Windows DOS 
(C)Copyright Microsoft Corp 1990-2001. 

C:\DOCUME~1\ADMINI~1>masm 
Microsoft (R) Macro Assembler Version 5.00 
Copyright (C) Microsoft Corp 1981-1985, 1987.  All rights reserved. 

Source filename [.ASM]: p1 
Object filename [p1.OBJ]: 
Source listing  [NUL.LST]: 
Cross-reference [NUL.CRF]: 
p1.ASM(8): Out of memory
scuzg
[第3楼]   [ 回复时间:2010-04-26 18:19 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
除了mess说的那个问题外,另外还有两个问题:
① 倒数第7条语句
            mov di,2 
应该改为;
            add di,2 
为什么要这样修改,请楼主自己思考一下。

② 'welcome to masm'只有15个字符,而楼主控制循环的CX值是16。
上述两点修改后就能正常运行了。
girl_lulu
[第4楼]   [ 回复时间:2010-04-26 18:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
回复:[第3楼]
------------------
谢谢你的回答哈~
1. mov di,2 这个笔误不能原谅!!
2.按你的回答改了,结果还是p1.ASM(8): Out of memory  不知为何?
3.能不能说下mov ax,0b800h和mov ax,b800h  本质区别到底何在?
  mov ax,b800h 
  mov es,ax 
         ————我的理解是,这两条指令就是设置段地址,AX为16位寄存器,问了好多别人都让我看书,没知识问问题都没底气啊……
scuzg
[第5楼]   [ 回复时间:2010-04-26 19:27 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
编程程序将认为b800h是一个变量名或符号地址,因为这符合标识符的语法规则,所以当十六进制数以字母A~F开头时,就需要前缀0,以避免二义性。
scuzg
[第6楼]   [ 回复时间:2010-04-26 19:28 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
至于你说的编译后出现:
p1.ASM(8): Out of memory  
咱这里都没有呀?要不你换个编译器或电脑试试?
girl_lulu
[第7楼]   [ 回复时间:2010-04-27 12:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
回复:[第6楼]
------------------
1.mov ax,0b800h这个指令终于懂了。你提示一下,我就记得在课本上哪里出现过,103页(5.3在DEBUG中跟踪用loop指令实现的循环程序)。我不觉得这不算是偷懒,有时候被问题挡住了就算一页一页去翻也不一定找得到。
2.别的程序能编译,应该不是编译器的问题。是不是我的程序有大问题?我检查不出来···
scuzg
[第8楼]   [ 回复时间:2010-04-27 14:01 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
程序没有大问题呀?我这里编译得挺好的。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved