. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第7章认真了一次,希望能过了测试  王爽 <汇编语言> 第2版 第7章 p160  [待解决] 回复[ 3次 ]   点击[ 463次 ]  
godok220
[帖 主]   [ 发表时间:2010-11-05 19:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-21 13:38
;王爽 <汇编语言> 第2版 第7章 p160  7.9  
assume cs:codesg,ds:datasg,ss:stacksg
                                     
stacksg segment
    dw 8 dup(0)
stacksg ends

datasg segment
 db '1. display      '              
 db '1. brows        '
 db '1. replace      '
 db '1. modify       '               
datasg ends

codesg segment
start: 
        mov ax,datasg
        mov ds,ax     ;设置ds指向datasg段
        mov ax,stacksg
        mov ss,ax     ;设置ss指向stacksg段
        mov sp,10
        mov si,3      ;每行起始转换位置
        mov bx,0      ;每行起始位置, 每增加一行起始位置+16
        mov cx,4      ;设置外层循环4次
        push cx                ;将cx压栈
         
        s0:                ;外层
        push cx         ;每次循环cx减1,需要重新压栈保存cx 
        mov cx,4        ;设置内循环次数
                s:
                mov al,[bx][si]         ;将ds:[3] 暂存al
                and al,11011111B ;转换为大写
                mov [bx][si],al  ;传送回原位置
                inc si                 ;si每次加1
                loop s                 ;内循环4次后 完成了1行前4个字母的大写转换
        pop cx                ;从栈内pop出最近push的cx值
        mov si,3        ;重新设置si为3,每行要转换的起始位置
        add bx,16        ;bx+16转到下一行
        loop s0                ;转到s0循环执行,cx=cx-1 
codesg ends 
end start
20085617
[第1楼]   [ 回复时间:2010-11-10 21:48 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-11-01 15:17
我帮你试过了,没有报错
ares313
[第2楼]   [ 回复时间:2010-12-06 20:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-16 17:02
呵呵,这是我的,类似!通过了
供参考
assume cs:aa,ss:bb,ds:cc
bb segment
dw 0,0,0,0,0,0,0,0
bb ends
cc segment
db '1. display      '
db '2. brows        '
db '3. replace      '
db '4. modify       '
cc ends
aa segment
start:
mov ax,cc
mov ds,ax
mov ax,bb
mov ss,ax
mov sp,16

mov cx,4
mov bx,0
s0:
push cx

mov cx,4
mov si,3

s:
mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop s

pop cx
add bx,16
loop s0

mov ax,4c00h
int 21h

aa ends
end start
chaoren399
[第3楼]   [ 回复时间:2010-12-13 14:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-01 22:13
我在看课本
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved