. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验九的问题  [待解决] 回复[ 6次 ]   点击[ 424次 ]  
mengdewan
[帖 主]   [ 发表时间:2009-03-03 10:45 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:5
注册日期:2008-12-18 16:07
下面是自己编的实验九的部分,全部的还不会,
但下面的也实现不了功能,请高人给指点下,自己找不到错误,心里别说那个郁闷了

assume cs:code  
     
date segment 
    db 'welcome to masm!'
    db 02h
date ends 

code segment 
start:mov ax,date               
      mov ds,ax 
      mov bx,0 
      mov si,10h
      mov ax,0b800h     
      mov es,ax   
      mov bp,0 
      mov cx,16 
    s:mov al,[bx]
       
      mov es:[bp],al 
      mov ah,ds:[0010h]
      mov es:[bp+1],ah
      
      inc bx 
      add bp,2 
      loop s 
      mov ax,4c00h 
      int  21h 
code ends 
end start
17300
[第1楼]   [ 回复时间:2009-03-04 13:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-02-21 14:11
ASSUME CS:CODESG
DATA SEGMENT
dw 119,101,99,111,109,101,32,109,97,115,109,33
DATA ENDS
CODESG SEGMENT
START: MOV AX,DATA
       MOV DS,AX
       MOV BX,0
       
       MOV AX,0B800H
       MOV ES,AX

       MOV CX,12
S:     MOV DX,DS:[BX]
       MOV ES:[BX],DX
       mov es:[bx+160],dx
       mov es:[bx+320],dx
       mov es:[bx+1],0CAh
       mov es:[bx+161],42h
       mov es:[bx+321],71h
       add bx,2
LOOP S
       MOV AX,4C00H
       INT 21H
CODESG ENDS
END START
上面的是我写的
不知道对你有帮助没有
xiaosong
[第2楼]   [ 回复时间:2009-03-10 19:15 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:3
注册日期:2009-03-05 20:41
没啊  我帮你运行了一下 有实验结果啊 只是"ELCOM TO MSAM"不在屏幕中间而已。你只要把0b800h 这个段地址改一改 改到屏幕中间就好了。我贴一下我的程序,只写了显示一条字符串的程序。
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
    DB "welcom to masm!"
DATA ENDS

CODE SEGMENT  
START:
    MOV AX,DATA
    MOV DS,AX
    MOV BX,0
    MOV SI,0
    MOV AX,0B8AEH
    MOV ES,AX
    MOV CX,16
 S: MOV BYTE PTR ES:[SI],BYTE PTR [BX]
    INC BX
    INC SI
    MOV BYTE PTR ES:[SI],02H
    INC SI
    LOOP S   
    MOV AH,4CH
    INT 21H
CODE ENDS
    END START
也是初学者。编得也没什么含量。不要笑我。
xiaosong
[第3楼]   [ 回复时间:2009-03-10 19:18 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:3
注册日期:2009-03-05 20:41
搞错了 上面是我没改之前的程序。再贴一下修改后的程序
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
    DB "welcom to masm!"
DATA ENDS

CODE SEGMENT  
START:
    MOV AX,DATA
    MOV DS,AX
    MOV BX,0
    MOV SI,0
    MOV AX,0B8AEH
    MOV ES,AX
    MOV CX,16
 S: MOV AL,[BX]
    MOV ES:[SI],AL
    INC BX
    INC SI
    MOV BYTE PTR ES:[SI],02H
    INC SI
    LOOP S   
    MOV AH,4CH
    INT 21H
CODE ENDS
    END START
xiaosong
[第4楼]   [ 回复时间:2009-03-10 19:20 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:3
注册日期:2009-03-05 20:41
我经常犯直接从内存转移到内存的错误的错误,见笑了。
hawk
[第5楼]   [ 回复时间:2009-03-17 18:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-16 13:06
这是我编写的?请朋友们,已经运行通过,请参考,更欢迎指正!
;在屏幕指定位置现实彩色指定文字
assume cs:codesg;ds:datasg ss:stackse
stacksg segment
db 16 dup(0)
stacksg ends
datasg segment
db 'Welcome to masm!';16 byte
db 02,36,113
datasg ends
codesg segment
start:        mov ax,datasg
        mov ds,ax
;显存地址从B800:0开始
        mov ax,0b800h
        mov es,ax ;显存段地址初始化
        mov di,872 ;显存偏移地址初始化
        mov si,16
        mov cx,3
lop2:        mov bx,0 ;文字及属性地址初始化
        push cx
        mov cx,16
        add di,160 ;换行显示
lop1:        mov al,ds:[bx]
        mov ah,ds:[si]
        mov es:[di],ax
        add di,2
        inc bx
loop lop1
        inc si
        pop cx
        sub di,32
loop lop2
;------------------------结束程序
        mov ax,4c00h
        int 21h
codesg ends
end start
初学杂练,请关照!
hawk
[第6楼]   [ 回复时间:2009-03-17 19:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-16 13:06
晕了,忘记给堆栈初始化了
应该在初始化部分加上
mov ax,stacksg
mov ss,ax
mov sp,16

呵呵
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved