鱼C论坛

 找回密码
 立即注册
查看: 3928|回复: 11

[争议讨论] 汇编实验5第五题,求真相!

[复制链接]
发表于 2011-12-21 14:09:01 | 显示全部楼层 |阅读模式
1鱼币
第(5)题原题分了几个段,什么a段,b段,c段,可编译的时候就提示有c的一行错误(编译器是masm615),于是把c换成什么d或者m什么乱七八糟的东西都可以,这难道是像c语言里那样还有关键字吗,有的话是什么意思呢。

还有发现一个比较有意思的事情,并没有采用小甲鱼老湿给的提示,而是在a,b段里的数据相加时,同时用了3个段寄存器,ds,es,ss。代码如下:
assume cs:code,ds:a
a segment
        db 1,2,3,4,5,6,7,8
a ends
b segment
        db 1,2,3,4,5,6,7,8
b ends
m segment
        db 0,0,0,0,0,0,0,0
m ends
code segment
start:
        mov ax,a
        mov ds,ax
        mov ax,b
        mov es,ax
        mov ax,m
        mov ss,ax
        mov cx,8
      s:mov ax,ds:[bx]
        add ax,es:[bx]
        mov ss:[bx],ax
        inc bx
        loop s
        mov ax,4c00h
        int 21h
code ends
end start
也能正常通过,结果也正确,这就好比cx和loop指令相关,但不用loop的时候,cx也可以用来做些其他事情,所以这里我把和栈相关的ss段用做他用,简化了一下,算是一种分享吧,高手勿笑,菜鸟路过,有什么错误或者不好的地方可以告诉我哦,嘿嘿~

不过第一个问题谁能告诉我呢,本人刚进鱼c不久,求真相...哈哈!

最佳答案

查看完整内容

编译器可能将C这个字符做了别的用途。。所以段名最好不要用c。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-21 14:09:02 | 显示全部楼层
编译器可能将C这个字符做了别的用途。。所以段名最好不要用c。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-12-21 19:23:30 | 显示全部楼层
编译器问题吧!因为我这里masm 6.0没有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-12-21 20:04:31 | 显示全部楼层
编译器问题。。。其他版本的没事。。。

还有,小甲鱼老湿……:L
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-12-21 21:29:32 | 显示全部楼层
最好不要用单个字母作为段名,有些编译器过不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-12-22 22:02:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-12-22 22:03:19 | 显示全部楼层
游戏人生 发表于 2011-12-21 21:29
最好不要用单个字母作为段名,有些编译器过不了

恩,了解了,我用两个masm不同版本的比较了一下,呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-12-22 22:03:57 | 显示全部楼层
D.调dē哗丽 发表于 2011-12-21 20:04
编译器问题。。。其他版本的没事。。。

还有,小甲鱼老湿……

恩,了解了,嘿嘿,老湿是用来调侃的,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-12-22 22:05:05 | 显示全部楼层
回答的都差不过,我也自己实践过了,分就给第一个人吧,就一个鱼币而已,主要是目前我太穷了,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-12-30 23:46:42 | 显示全部楼层
masm6.1以上的编译器c不能做段名吧,我做这个实验刚不久,代码如下不知有没有错。
assume cs:code
a  segment
db 1,2,3,4,5,6,7,8
a  ends

b  segment
db 1,2,3,4,5,6,7,8
b  ends

ca  segment
db 0,0,0,0,0,0,0,0
ca  ends

code segment
start:  mov ax,a
        mov ds,ax
        mov ax,ca
        mov es,ax
        mov bx,0
        mov cx,8

s:      mov dl,[bx]
        mov es:[bx],dl
        inc bx
        loop s

        mov ax,b
        mov ds,ax
        mov bx,0
        mov cx,8
z:      mov dl,[bx]
        add es:[bx],dl
        inc bx
        loop z

        mov ax,4c00h
        int 21h
code    ends
end     start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-12-31 00:05:50 | 显示全部楼层
赵璐 发表于 2011-12-30 23:46
masm6.1以上的编译器c不能做段名吧,我做这个实验刚不久,代码如下不知有没有错。
assume cs:code
a  seg ...

恩,masm5.0就不会出错,开始以为是书错了呢,呵呵,原来是自己见识的少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-12-31 01:31:27 | 显示全部楼层
@景天@ 发表于 2011-12-31 00:05
恩,masm5.0就不会出错,开始以为是书错了呢,呵呵,原来是自己见识的少

我开始也纠结了几天呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表