. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  7.7 程序 为什么  [待解决] 回复[ 5次 ]   点击[ 399次 ]  
static
[帖 主]   [ 发表时间:2010-12-22 12:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
;问题7.6 将datasg段中每个单词改为大写字母
assume cs:codesg,ds:datasg;,ss:stacksg

datasg segment
        db '1.file          '
        db '2.edit          '
        db '3.search        '
        db '4.view          '
        db '5.opinions      '
        db '6.help          '
datasg ends

;stacksg segment
;        db '    '
;stacksg ends

codesg segment
start:
    mov ax,datasg
    mov ds,ax
   
;    mov ax,stacksg
;    mov ss,ax
;    mov sp,4
   
    mov bx,0
    mov di,0
    mov cx,6
s0:
    push cx
    mov cx,10
    mov bx,0
s1: 
    mov al,[di+bx+2]
    and al,11011111b
    mov [di+bx+2],al
    inc bx
    loop s1
    
    add di,16
    pop cx
    loop s0
    
    mov ax,4c00h
    int 21h
codesg ends
end start
;问题1:[]内不能是bx*10
;问题2:bx换成2为什么不行
;问题3:为什么加上注释掉的指令 调试时,会有一个int3
masmaster
[第1楼]   [ 回复时间:2010-12-22 20:32 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19

原题是把每行第一个字母变大写

8086不支持变址操作数比例因子,即,在[]内不允许出现*号

因为逐字符操作,所以源地址必须以1来增量

因为你定义的栈过小! 如果不定义的话,DOS会自动分配一个128字节的空间作为默认的栈段供你使用。
liwangqiang
[第2楼]   [ 回复时间:2010-12-25 16:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-05 22:29
楼上大能
liwangqiang
[第3楼]   [ 回复时间:2010-12-25 17:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-05 22:29
回复:[第2楼]
------------------
他的程序我运行了下 我想请问下 为什么我不单步运行就可以运行成功,显示他的程序修改成功。而单步就会跳出一个int 3而且后面的指令也不对。是不是因为直接运行时 他的栈够用 而单步运行 其实是单步中断 要用栈来存寄存器的值 所以不够用了 能不能详细的解释下 谢谢。
static
[第4楼]   [ 回复时间:2010-12-26 18:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
一楼大虾
1.续着前面的课本 改的
2.8086不支持,那其他的呢,32位的系统
3.要对比着C来学习啊  多相通。他们都是从0开始的   哈哈
4.虽然定义的栈小,当应该足够用了吧。我就用到了一个字的大小

三楼的我也很迷茫啊
够用了 为什么会出错 
再次 谢谢
qq6455
[第5楼]   [ 回复时间:2011-03-29 23:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-23 02:34
你把di当bx来用也行,那你的第一个cx=6还说的过去,那第二个cx=10是怎么解释?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved