教材p15 习题。
参***略)
略)教材p26-27习题。
略)教材p71-72习题。
补充说明:1)对于3.1题,当操作数是存储器操作数时,注意区分内存操作数的物理地址与存储单元的内容!
2)对于3.2题,不仅要能够判断,如果出错,还要知道具体出错的原因。
3)对于3.7和3.9,要能够分析出每一条指令执行完后,目的操作数中寄存器的内容是什么。
注意题目要求:源操作数的寻址方式,并计算相应的物理地址。
1) mov ax, bx
寄存器寻址因为操作数是寄存器操作数,所以无相应的物理地址。
2) mov ax, [bx]
寄存器间接寻址物理地址= (ds)×16+(bx) =30700h
3) mov ax, table[si]
变址寻址物理地址= (ds)×16+(si) +table = 31804h
4) mov ax, [bp]disp
基址寻址物理地址= (ss)×16+(bp)+disp = 41700h
5) mov ax, [bx][di]
基址变址寻址物理地址= (ds)×16+(bx)+(di) =30800h
6) mov ax, [bp][si]table
相对基址变址寻址物理地址= (ss)×16+(bp)+(si)+table = 42504h
注意题目要求:源8086/8088微处理器。
1) sub ax, [bx+bp]
错误原因: 对于源操作数,没有这种寻址方式。
2) add value1,value2
错误原因:源操作数和目的操作数不能同时为存储器操作数。
3) rol [bx][di],3
错误原因:当移位次数大于1时,要先把移位次数送入cl寄存器。
即:mov cl, 3
rol [bx][di], cl
4) not bx, dx
错误原因: not指令只能有一个操作数。
5) mov ds, 1000h
错误原因: 不能把立即数送入段寄存器。
6) mov cs, ax
错误原因: cs寄存器不能作为目的操作数。
7) cmp 1000h, bx
错误原因:目的操作数不能为立即数。
8) mov value1, cx
9) mov ds, es
错误原因:两个段寄存器之间不能直接进行传送操作。
10) push cs
11) push 2a00h
错误原因: push指令的操作数只能是16位寄存器操作数或16位存储器操作数。
备注: 由于本题题目中指出针对8086/8088微处理器,故此指令用法错误。若针对386以上微处理,则正确。
12) in 100h, al
错误原因: 源操作数和目的操作数均不符合in指令的语法格式。
备注:具体语法格式可参见第3章课件或教材,这里只列举四个书写正确的实例。
① in al, 50h 表示从50h端口读入一个字节数据送入al
② in ax, 50h 表示从50h端口读入一个字数据送入ax
③ mov dx, 100h
in al, dx 表示从100h端口读入一个字节数据送入al
mov dl, 100h
in al, dx 表示从100h端口读入一个字数据送入ax
和④即说明,当端口号超过ffh(即255)时,要先将端口号送入dx
13) lea bx, 4300h
错误原因: 立即数不存在偏移地址。
14) mov ax, [cx]
错误原因: 用于寄存器间接寻址的寄存器只能是bx,bp,si,di之一。
ps:符合要求的指令或程序段不止一种,这里只给出一种参考。
1) mov ax, 0
and ax,0
2) mov cl,4
rol bl,cl
4) and bx,0f7afh
或: and bx, 1111011110101111b
或: btr bx,4
btr bx,6
btr bx,11
注: 指令btr的用法请参照教材p69
5) xor ax, 0100000000100000b 或 xor ax, 4020h
6) test dx,0001h
jnz l1
l1b0位为1
test dx, 0200h
jnz l2
l2b9位为1
或: bt dx, 0
bt dx, 9
注: 指令bt的用法请参照教材p69
ax) =8d00h (cx) =0004h
bx) =d36ah
教材p93-94习题。
补充说明:1)对于4.7,要结合题目明确理解伪指令org, $的含义和用途,能够举一反三。
另外注意,对于用equ或=定义的常量是不占用内存单元的。比如这里的data1和data2。
2)结合第4章课件中的例题掌握伪指令label和运算符ptr的用法。
注意: 题目要求的变量的类型是字节变量还是字变量。
1)此题可以有多种写法(结合右图示理解)
定义方法一:
data1 db 86h, 27h, 23h, 00h, 24h, 1ah
定义方法二:
data1 label byte
x dw 2786h, 0023h, 1a24h
定义方法三:
data1 equ this byte
x dw 2786h, 0023h, 1a24h
注意:在定义方法。
二、三中,data1是一个符号,与x占用的是同一空间。
2)此题可以有三种定义方法(结合右图示理解)
定义方法一:
data2 dw 0b430h, 1062h
定义方法二:
data2 label word
x db 30h, 0b4h, 62h,10h
定义方法三:
data2 equ this word
x db 30h, 0b4h, 62h,10h
注意:在定义方法。
二、三中,data2是一个符号,与x占用的是同一空间。
3)data3 db 4 dup (20h), 20, 0, 6 dup(1,2)
4)此题可以有两种定义方法。
定义方法一:
data1 label word
data2 db 10h, 00h, 41h, 42h
定义方法二:
data1 equ this word
data2 db 10h, 00h, 41h, 42h
d_seg segment para ‘data’
infor1 db 01111111b
infor2 db ’example’
infor5 equ $-infor2
infor3 dw 0ffffh
infor4 dw 4231h
d_seg ends
注意:题目要求,如要求infor5为数值常量等。
1) var1的偏移量30h, var2的偏移量3ah
2) 符号常量cnt的值10h
3) var2+2单元的内容为2
d_seg segment para stack
fld1 db 0,256,a
fld2 dw a400h,60h
fld3 db this is computer
fld4 dw 0,4000h,’abcd’
d_seg endp
c_seg segment para ‘code’
assume cs:c_seg ds:d_seg
main proc far
lea si, fld1
s1: mov d1, offset fld2
mov ax, [si]
mov [di],4200h
main endp
c_seg ends
end s1
教材p107习题。
补充说明:1)对于5.3,注意程序结束时的终止结点!
略)教材: p133-134
ps: 1)6.2题目更正: p143最后一行 inc 改为 inc si
2)6.7提示:
利用int 21h的1号功能和循环完成字符串的输入。
说明:第1次运行完指令inc si时,(al) =08h
至于cx寄存器的值,题目表述的有些不清楚。
如果是指第一次执行完inc si并且还未执行loop cx指令,则(cx)= 10
如果是指第一次执行完inc si并且还已执行loop cx指令,则(cx)= 9
参考思路:利用堆栈“先入后出”的特性,每输入一个字符即压入堆栈,待全部输入完毕后,再一次执行弹栈操作,随即输出,从而实现字符串的逆序输出。
与该思路对应的程序实现:
code segment
assume cs:code
main proc far
push ds
mov ax,0
push ax
mov cx,0
input: mov ah,1
int 21h
inc cx
push ax
cmp al,'$
jnz input
pop dx
dec cx
output: pop dx
mov ah,2
int 21h
loop output
retmain endp
code ends
end main
1)在8086/8088中压栈/弹栈操作只能以字数据为单位。故尽管输入的字符是在dl寄存器中,入栈时是把dx压入堆栈的。同样,弹出时,是从堆栈中弹出字数据到dx,不过程序要输出的字符只在低8位即dl寄存器中。
汇编语言补充作业
微机系统与接 术 汇编补充作业。1.寻址方式小结。请根据已填的格式,完成下面表中的空白部分 2.指出下列8088指令的错误 1 mov ah,bx 2 mov bx si 3 mov ax,si di 4 mov mydat bx si es ax 5 mov bl,1000 6 mov cs,ax...
汇编语言程序设计作业
题1.编写汇编语言源程序实现从键盘上输入1949至2049年中的某一日,计算并输出该日是这一年的第几天以及星期几。1 提示 通过输入的年 year 月 month 日 day 来计算该日是年内第几天 days 再以 year 1 year 1 4 year 1 100 year 1 400 days...
汇编语言程序设计作业
冒泡法排序 题目 1.程序简介 采用冒泡法进行排序 2.流程图 3 实现输入数据直接在程序中通过数组定义,或用文件方式读入,不要采用scanf include using namespace std define count 20数据个数。void bubblesort long array,int...