+ -
当前位置:首页 → 问答吧 → 急急急.....关于输出问题

急急急.....关于输出问题

时间:2011-11-29

来源:互联网

小菜新接触汇编,一直搞的C++,输出用的是cout现在汇编下我想输出信息改怎么搞,比如我想输出一个整数5,改怎么做能,代码是什么呢??
是这样吗:
MOV AX,5
INT 21H
是这样吗??

作者: qscool1987   发布时间: 2011-11-29

输出一个字符,可以用 int21h 的字符输出功能吧。Assembly code
  mov  ah, 2
  mov  dl, '5'  ; 需要将数值 5 转换为显示的字符 '5' 放在 DL 寄存器里
  int  21h

作者: zara   发布时间: 2011-11-29

引用 1 楼 zara 的回复:
输出一个字符,可以用 int21h 的字符输出功能吧。

Assembly code
mov ah, 2
mov dl, '5' ; 需要将数值 5 转换为显示的字符 '5' 放在 DL 寄存器里
int 21h

可是没反应啊,输出屏幕上没有5啊

作者: qscool1987   发布时间: 2011-11-29

不会吧。你什么环境,完整的源程序什么样子?

作者: zara   发布时间: 2011-11-29

Assembly code
;这是自动生成的代码模板
      STACKS  SEGMENT   STACK       ;堆栈段
              DW        128 DUP(?)  ;注意这里只有128个字节
      STACKS  ENDS
       DATAS  SEGMENT               ;数据段
;请在这里定义您的数据
              ;MOV       AH, 2
              MOV       DL, '5'     ; 需要将数值 5 转换为显示的字符 '5' 放在 DL 寄存器里
              INT       21H
       DATAS  ENDS
       CODES  SEGMENT               ;代码段
              ASSUME    CS:CODES,DS:DATAS
      START:  MOV       AX,DATAS    ;初始化
              MOV       DS,AX
;请在这里添加您的代码
 
              MOV       AX,4C00H    ;退出程序
              INT       21H
       CODES  ENDS
              END       START

我用的是轻松汇编

作者: qscool1987   发布时间: 2011-11-29

呃,你将那个显示字符的功能调用放在 DATAS 段里,什么意思呢?应该放在 ;请在这里添加您的代码 那里吧,而且,mov ah, 2 这行也不能被注释了。

作者: zara   发布时间: 2011-11-29

表示有压力,多看书

作者: hushoubo   发布时间: 2011-11-29

........
Assembly code

;这是自动生成的代码模板
      STACKS  SEGMENT   STACK       ;堆栈段
              DW        128 DUP(?)  ;注意这里只有128个字节
      STACKS  ENDS
       DATAS  SEGMENT               ;数据段
;请在这里定义您的数据
              MOV       AH, 2
              MOV       DL, '5'     ; 需要将数值 5 转换为显示的字符 '5' 放在 DL 寄存器里

       DATAS  ENDS
       CODES  SEGMENT               ;代码段
              ASSUME    CS:CODES,DS:DATAS
      START:  MOV       AX,DATAS    ;初始化
              MOV       DS,AX
;请在这里添加您的代码
              INT       21H
              MOV       AX,4C00H    ;退出程序
              INT       21H
       CODES  ENDS
              END       START


我这样改了但是还是不输出,我网上也找了不少代码一样不输出信息,这编译器是不是垃圾啊

作者: qscool1987   发布时间: 2011-11-29

你把指令放在数据段里,还说编译器垃.圾?上面不是已经说明了的吗?!
Assembly code
      STACKS  SEGMENT   STACK       ;堆栈段
              DW        128 DUP(?)  ;注意这里只有128个字节
      STACKS  ENDS
       DATAS  SEGMENT               ;数据段
;请在这里定义您的数据

       DATAS  ENDS
       CODES  SEGMENT               ;代码段
              ASSUME    CS:CODES,DS:DATAS
      START:  MOV       AX,DATAS    ;初始化
              MOV       DS,AX
;请在这里添加您的代码
              MOV       AH, 2
              MOV       DL, '5'     ; 需要将数值 5 转换为显示的字符 '5' 放在 DL 寄存器里
              INT       21H
              MOV       AX,4C00H    ;退出程序
              INT       21H
       CODES  ENDS
              END       START

作者: zara   发布时间: 2011-11-29

引用 8 楼 zara 的回复:
你把指令放在数据段里,还说编译器垃.圾?上面不是已经说明了的吗?!

Assembly code
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
DATAS SEGMENT ……

可这样还是没有啊,真崩溃啊,是不是我有些设置没搞好

作者: qscool1987   发布时间: 2011-11-29


是不是数码段要加数据呢????
我第一次摸汇编真不清楚

作者: qscool1987   发布时间: 2011-11-29

引用 7 楼 qscool1987 的回复:
........

Assembly code

;这是自动生成的代码模板
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
DATAS SEGMENT ;数据段
;请……

你这个不是规范的汇编程序,所以显示不出来。
汇编语言有多个家族,每个家庭语法不尽相同,用的较多的是MASM,你要干哪怕再小的一件事,你也得把环境搭建好,然后才能编辑、编译、调试和运行程序,要不然,你是事倍功半,甚至难达目标。
-----------------
你在这里下载编译程序包:http://www.masm32.com/masmdl.htm
下载后,它是一个exe文件,你解压,它会提示,你就把它安装在c:\masm32目录下。
然后你用写字本(或者其他的纯文本编译器),编辑下面的代码,存放在:c:\masm32\bin 文件夹下,假设文件名是hi.asm (扩展名统一用.asm)
然后打开Windows控制台窗口,将当前文件夹切换到c:\masm32\bin
然后输入: ML /c hi.asm 回车
它会将你的hi.asm编译成hi.obj文件
然后你再输入:link16 /TINY hi.obj; 回车(分号不要省略)
你的程序就编译成功了,文件名是hi.com
你运行hi.com试试。(就在控制台窗口下输入 hi 运行)
;下面是程序全文:
Assembly code


code segment public
        assume cs:code,ds:code
        org 100h
start:
        mov ax,cs
        mov ds,ax
        mov dx,offset msg1
        mov ah,09h
        int 21h
        mov ax,4c00h
        int 21h
msg1 db 'Hello World!',0dh,0ah,'$'
code    ends
        end start

作者: gsy999   发布时间: 2011-11-29

不是必须的。而且,数据也不是必须放在数据段里的;dos 下的 com 格式的程序文件,就是将代码和数据合放在一个段里。

作者: zara   发布时间: 2011-11-29


我已经磨了三个小时,然后连一个例如hello world的程序都弄不出来,况且我还学过几年的C+,很难受啊
如此之难,打消我的积极性啊

作者: qscool1987   发布时间: 2011-11-29

引用 13 楼 qscool1987 的回复:
我已经磨了三个小时,然后连一个例如hello world的程序都弄不出来,况且我还学过几年的C+,很难受啊
如此之难,打消我的积极性啊

怎么可能。你用的什么编译器 编译程序和链接程序在哪个目录下?你帖出来,我马上可以让你显示出Hello world

作者: gsy999   发布时间: 2011-11-29

我用的是轻松汇编,武汉大学那个教授发明的,我的编译链接都能通过,这么说我的目录应该没错,可是就是显示不了信息

作者: qscool1987   发布时间: 2011-11-29

引用 15 楼 qscool1987 的回复:
我用的是轻松汇编,武汉大学那个教授发明的,我的编译链接都能通过,这么说我的目录应该没错,可是就是显示不了信息

你不能双击程序,要从控制台手工执行应用程序。

作者: gsy999   发布时间: 2011-11-29

引用 16 楼 gsy999 的回复:
引用 15 楼 qscool1987 的回复:
我用的是轻松汇编,武汉大学那个教授发明的,我的编译链接都能通过,这么说我的目录应该没错,可是就是显示不了信息

你不能双击程序,要从控制台手工执行应用程序。

我就是点的编译链接执行,然后看不到啊,难道说要从控制台,也就是cmd里面输入你说的那一串步骤吗???

作者: qscool1987   发布时间: 2011-11-29

哦,我现在发现问题是这样的,点执行之后它窗口闪了一下然后就变小停在那里了,我就看不到信息了

作者: qscool1987   发布时间: 2011-11-29

引用 17 楼 qscool1987 的回复:
引用 16 楼 gsy999 的回复:
引用 15 楼 qscool1987 的回复:
我用的是轻松汇编,武汉大学那个教授发明的,我的编译链接都能通过,这么说我的目录应该没错,可是就是显示不了信息

你不能双击程序,要从控制台手工执行应用程序。

我就是点的编译链接执行,然后看不到啊,难道说要从控制台,也就是cmd里面输入你说的那一串步骤吗???

控制台程序通常不能以Windows应用程序那样执行,你应该从控制台进去执行,像显示串什么的,都是输出到控制台的。不要用一个模式去解决所有的问题。

作者: gsy999   发布时间: 2011-11-29