资源描述
汇编语言实验三
3.15
(1).mov byte ptr [bx],1000因为是字节型的,所以最大值不可能超过255,所以不正确,改为mov word ptr [bx],1000
(2).mov bx,offset myword[si]
myword是一个字变量;错在offset,myword是个变量,而[si]是寄存器间接寻址;而offset只能对静态地址有效.应改为:lea bx,myword[si].
(3)cmp mybyte1,mybyte2两个都是存储单元,指令不允许
(4)mov mybyte1,al+1寄存器不能直接用运算符计算,应该使用add
(5)sub al,myword al是字节大小的寄存器,而myword是字大小的变量(6)jnz myword jnz是段内的短转移,8位偏移量,myword是字类型的若做转移的话应该是近转移,矛盾;其次,转移指令后可加标号,但不能使用变量的,操作数寻址方式不对!
把上述程序语句修改写在一个程序里
3.16
------------------------------------------------------------------------------------
DATAS SEGMENT
buf db 255
db 0
db 255 dup(0)
asc db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,61h,62h,63h,64h,65h,66h
bufx dw ?
sign db 'please enter a number:$'
sign1 db 'it is positive number$'
sign2 db 'it is negetive number$'
DATAS ENDS
STACKS SEGMENT
db 1024 dup(0);此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ah,09h
mov dx,offset sign
int 21h
mov ah,0Ah
mov dx,offset buf
int 21h
inc dx
inc dx
mov ax,0
important: mov bx,dx
mov cl,[bx]
cmp asc,cl
jnz again
jz equal
again:
inc asc
inc ax
cmp cl,asc
jnz again
equal: push ax
inc dx
cmp dx,0006h
jnz important
add sp,8
pop ax
cmp ax,7
jle signx
mov ah,09h
mov dx,offset sign2
int 21h
MOV AH,4CH
INT 21H
signx: mov ah,09h
mov dx,offset sign1
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START
3.20
DATAS SEGMENT
bufx db -64H
bufy db 10H
bufz db 10H
DATAS ENDS
STACKS SEGMENT
db 1024 dup(0);此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov bl,bufx
mov cl,bufy
mov dl,bufz
cmp bl,cl
jz again
cmp dl,bl
jz x
cmp cl,dl
jz x
mov ax,02h
mov dl,30h
int 21h
MOV AH,4CH
INT 21H
again: cmp bl,dl
jz equal
x: mov ax,02h
mov dl,31h
int 21h
MOV AH,4CH
INT 21H
equal: mov ax,02h
mov dl,32h
int 21h
MOV AH,4CH
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
3.22
.model small
.stack
.data
b_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据
num equ 10 ;数据个数
sum db ?;预留结果单元
.code
.startup
xor si, si ;位移量清零
xor al, al ;取第一个数
mov cx, num ;累加次数
again: add al, b_data[si] ;累加
inc si ;指向下一个数
loop again ;如未完,继续累加
mov sum, al ;完了,存结果
.exit 0
end
展开阅读全文