|
主题 : : 实验9,交作业。 [已解决] |
回复[ 7次 ]
点击[ 318次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-07-17 22:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
assume cs:codesg
data segment
db 'welcome to masm!'
data ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov cx,10h
mov si,0h
mov di,0h
s:
mov bx,0h;找不到中间位置,只能用bx来代替了,郁闷中。
mov ah,02h
mov al,ds:[si]
mov es:[bx+40h+di],ax
add bx,0a0h
mov ah,24h
mov al,ds:[si]
mov es:[bx+40h+di],ax
add bx,0a0h
mov ah,71h
mov al,ds:[si]
mov es:[bx+40h+di],ax
mov bx,0b40h
inc si
add di,2h
loop s
mov ax,4c00h
int 21h
codesg ends
end start
感觉这个实验没能很好的总结前面的知识,因为jmp和jcxz这些指令都用不上,要不就是用在这里面比较便扭。不知c中的if、 else if的语句在汇编里面是咋整的? | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-07-17 23:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
另外写了个双循环的。
assume cs:codesg
data segment
db 'welcome to masm!'
data ends
stacksg segment
dw 2 dup(0,0,0,0)
stacksg ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov ax,stacksg
mov ss,ax
mov sp,10h
mov cx,10h
mov si,0h
mov di,0h
s:
push cx
mov ax,7100h
push ax
mov ax,2400h
push ax
mov ax,200h
push ax
mov cx,3h
mov bx,0h
s1: pop ax
mov al,ds:[si]
mov es:[bx+40h+di],ax
add bx,0a0h
loop s1
pop cx
inc si
add di,2h
loop s
mov ax,4c00h
int 21h
codesg ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-07-17 23:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
初始化语句增加了不少,栈的用法有点生硬了,因为在定义栈的时候,如果做了初始化,碍于sp指向栈顶,我们需要的数值也取不出来,除非,先push。极度郁闷。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-07-17 23:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
再次改进,请教高手,这样用栈合法不??
assume cs:codesg
data segment
db 'welcome to masm!'
data ends
stacksg segment
dw 0,0,0,0
dw 16 dup(200h,2400h,7100h)
stacksg ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov ax,stacksg
mov ss,ax
mov sp,8h
mov cx,10h
mov si,0h
mov di,0h
s:
mov dx,cx
mov cx,3h
mov bx,0h
s1: pop ax
mov al,ds:[si]
mov es:[bx+40h+di],ax
add bx,0a0h
loop s1
mov cx,dx
inc si
add di,2h
loop s
mov ax,4c00h
int 21h
codesg ends
end start | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-07-19 11:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
一页25行,我们要显示3行在中间,那么中间位置应该是(25-3)/2,也就是11 12 13行。一行占a0h个字节,由此可以推出中间位置的第一行应该是11*160转化为十六进制就是6e0h,第二行6e0h+a0h,第三行6e0h+a0h+a0h。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-07-19 13:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第6楼]
[ 回复时间:2010-07-23 15:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16 |
一页25行,我们要显示3行在中间,那么中间位置应该是(25-3)/2,也就是11 12 13行。一行占a0h个字节,由此可以推出中间位置的第一行应该是11*160转化为十六进制就是6e0h,第二行6e0h+a0h,第三行6e0h+a0h+a0h。
------------------
回复:找的位置跟我一样。不错。呵呵。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-07-24 12:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
此贴由 贴主 于 [ 2010-07-24 12:30 ] 结贴。 结贴原因:问题已解决 | | |
|