重金悬赏!!! 汇编语言高手的进来看看
小弟跪求大侠出手相救用汇编语言编下列的问题(不要求全做,能做机题是几题)1、设数据段BUF单元开始有10个有符号的单字节数,其中必定有负数,找出其中真值最小的数,并显示在...
小弟跪求大侠出手相救用汇编语言编下列的问题(不要求全做,能做机题是几题)
1、设数据段BUF单元开始有10个有符号的单字节数,其中必定有负数,找出其中真值最小的数,并显示在屏幕上。(提示10个数自己可以随意指定,但其中必定有负数40分)
2、由键盘输入任意两位十进制数,然后转换成一字节BCD码→数据段BCCD单元。并显示在屏幕上。(40分)
3、有键盘输入任意组合的八个0、1字符,然后转换成等值的二进制数送数据段BEN开始的字节型单元并将数值以十进制的形式显示在屏幕上(40分)
4、由键盘输入两个3位的十进制数(一个三位十进制数以回车做为结束标志),转换成等值的二进制数→数据段的两个字型单元(40)
5、由键盘输入两位十六进制数,然后转换成等值的十进制数→屏幕显示(40) 展开
1、设数据段BUF单元开始有10个有符号的单字节数,其中必定有负数,找出其中真值最小的数,并显示在屏幕上。(提示10个数自己可以随意指定,但其中必定有负数40分)
2、由键盘输入任意两位十进制数,然后转换成一字节BCD码→数据段BCCD单元。并显示在屏幕上。(40分)
3、有键盘输入任意组合的八个0、1字符,然后转换成等值的二进制数送数据段BEN开始的字节型单元并将数值以十进制的形式显示在屏幕上(40分)
4、由键盘输入两个3位的十进制数(一个三位十进制数以回车做为结束标志),转换成等值的二进制数→数据段的两个字型单元(40)
5、由键盘输入两位十六进制数,然后转换成等值的十进制数→屏幕显示(40) 展开
2个回答
展开全部
小弟也是初来乍到,大家一起学习一下,
这是第一个程序,看不清楚的欢迎提问:
data segment
buf db 100,-120,1,2,4
count equ $-buf
data ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
mov bl,buf
cmp bl,0
jg lab
neg bl
lab: mov cx,count-1
lea si,buf+1
next: mov al,[si]
cmp al,0
jg lab1
neg al
lab1: cmp bl,al
jb lab2
mov bl,al
lab2: inc si
loop next
mov ch,2
mov cl,4
print:ror bl,cl
mov dl,bl
and dl,0fh
add dl,30h
cmp dl,39h
jb prt
add dl,7
prt: mov ah,2
int 21h
dec ch
jnz print
exit:mov ah,4ch
int 21h
code ends
end start
这是第二个程序,(这是在输入的整数小于225情况下成立的,满足要求)
data segment
bccd db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov bx,0
new: mov ah,1
int 21h
sub al,30h
jb exit
cmp al,9
ja exit
xchg al,bl
mov cl,0ah
mul cl
xchg al,bl
add bl,al
jmp new
exit: mov bccd,bl
mov ah,4ch
int 21h
code ends
end start
这是第五个程序,采用除十取余法,以下是代码:code segment
assume cs:code
start: mov ch,2
mov cl,4
new: mov ah,1
int 21h
sub al,30h
cmp al,30h
jb lab
sub al,27h
lab: shl bl,cl
or bl,al
dec ch
jnz new ;输入一个两位十六进制数
mov ch,2 ;转换为十进制
mov cl,4
mov dl,10
mov al,bl
mov bl,0
retry:shr bl,cl
mov ah,0
div dl ;dl放除数10
ror ah,cl
or bl,ah
dec ch
jnz retry
mov ch,2 ;输出
mov cl,4
mov dl,al
add dl,30h
mov ah,2
int 21h
print:rol bl,cl
mov dl,bl
and dl,0fh
add dl,30h
mov ah,2
int 21h
dec ch
jnz print
exit: mov ah,4ch
int 21h
code ends
end start
(这个程序的一个小缺点就是没有容错处理,但是默认输入正确,所以还是符合要求的)
以上程序均经过调试
老哥,太累了啊,明天接着编
第四道题目其实和第二道差不多,存在内存中的二进制其实就是十六进制,只要将第二道循环两遍就可以
第三道嘛,方法和前面的差不多,其实说到底就是把十六进制转换为十进制,就是在输入的时候比较麻烦。我就说下方法吧:用一个循环次数为8的循环输入,第一次输入的比如是1的话,减去30h,乘以2^7,加到寄存器BX里面;第二次同样的,只不过是乘以2^6,加到BX里面,依次类推,就可以把输入的8个1,0转换为是十六进制,后面的工作就是把十六进制转换为是十进制输出,和前面的一样
希望回答的够清楚,欢迎探讨啊
这是第一个程序,看不清楚的欢迎提问:
data segment
buf db 100,-120,1,2,4
count equ $-buf
data ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
mov bl,buf
cmp bl,0
jg lab
neg bl
lab: mov cx,count-1
lea si,buf+1
next: mov al,[si]
cmp al,0
jg lab1
neg al
lab1: cmp bl,al
jb lab2
mov bl,al
lab2: inc si
loop next
mov ch,2
mov cl,4
print:ror bl,cl
mov dl,bl
and dl,0fh
add dl,30h
cmp dl,39h
jb prt
add dl,7
prt: mov ah,2
int 21h
dec ch
jnz print
exit:mov ah,4ch
int 21h
code ends
end start
这是第二个程序,(这是在输入的整数小于225情况下成立的,满足要求)
data segment
bccd db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov bx,0
new: mov ah,1
int 21h
sub al,30h
jb exit
cmp al,9
ja exit
xchg al,bl
mov cl,0ah
mul cl
xchg al,bl
add bl,al
jmp new
exit: mov bccd,bl
mov ah,4ch
int 21h
code ends
end start
这是第五个程序,采用除十取余法,以下是代码:code segment
assume cs:code
start: mov ch,2
mov cl,4
new: mov ah,1
int 21h
sub al,30h
cmp al,30h
jb lab
sub al,27h
lab: shl bl,cl
or bl,al
dec ch
jnz new ;输入一个两位十六进制数
mov ch,2 ;转换为十进制
mov cl,4
mov dl,10
mov al,bl
mov bl,0
retry:shr bl,cl
mov ah,0
div dl ;dl放除数10
ror ah,cl
or bl,ah
dec ch
jnz retry
mov ch,2 ;输出
mov cl,4
mov dl,al
add dl,30h
mov ah,2
int 21h
print:rol bl,cl
mov dl,bl
and dl,0fh
add dl,30h
mov ah,2
int 21h
dec ch
jnz print
exit: mov ah,4ch
int 21h
code ends
end start
(这个程序的一个小缺点就是没有容错处理,但是默认输入正确,所以还是符合要求的)
以上程序均经过调试
老哥,太累了啊,明天接着编
第四道题目其实和第二道差不多,存在内存中的二进制其实就是十六进制,只要将第二道循环两遍就可以
第三道嘛,方法和前面的差不多,其实说到底就是把十六进制转换为十进制,就是在输入的时候比较麻烦。我就说下方法吧:用一个循环次数为8的循环输入,第一次输入的比如是1的话,减去30h,乘以2^7,加到寄存器BX里面;第二次同样的,只不过是乘以2^6,加到BX里面,依次类推,就可以把输入的8个1,0转换为是十六进制,后面的工作就是把十六进制转换为是十进制输出,和前面的一样
希望回答的够清楚,欢迎探讨啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.逻辑地址 源程序经过汇编或编译后,形成目标程序,每个目标程序都是以0为基址顺序进行编址的,原来用符号名访问的单元用具体的数据——单元号取代。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称逻辑空间。在逻辑空间中每条指令的地址和指令中要访问的操作数地址统称为逻辑地址。
2.物理地址 内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可惟一标识一个存储单元,称为内存地址(或物理地址)。
3.标志寄存器 用来保存程序执行结果或者状态的寄存器,由各个标志位组成,标志寄存器中的标志位分两种类型:状态标志位和控制标志位,分别用来反应结果状态或控制程序执行的。
状态标志位常用的有ZF(零标志位)、SF(符号标志位)、PF(奇偶标志位)、CF(进位标志位)、OF(溢出标志位)、AF(辅助进位标志位);
控制标志位常用的有DF(方向标志位,用于串处理操作方向控制的)、TF(单步执行的跟踪标志位)、IF(中断允许标志位)。
4.存储器寻址方式 在指令中,有时要寻找操作数的地址,有时要寻找转移地址(如转移指令、CALL指令等),这些寻找地址的方式就称为寻址方式。8086微处理器寻找操作数地址有七种方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等;寻找转移地址的方式有段内寻址和段间寻址,它们又分为段内直接、段内间接、段间直接、段间间接寻址等。
5.补码 补码是计算机底层运算中,对运算符的一种表示方法。主要功能是将减法的运算转化为加法运算。
简单的说对于一个二进制数来说,正数的话它的原码,反码,补码都一样.
如果机器数是负数,反码是对它的原码(符号位除外)各位取反而得到的.
补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。
1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少?
(1100100)2, (64)16
2.假设(DS)=0B00H,(BX)=0210H,对于指令MOV DS:120H[BX],AL,其目的操作数的物理地址为多少?
0B00H*10H+210H+120H = B330H
3.假设(BX)=0210H,(DI)=0060H,对于指令ADD DL,[BX][DI],其源操作数的偏移量为多少?
这道题说的不明白,偏移量是相对于谁的,如果相对于段,210H+60H=270H
如果相对于基址,就是DI,60H
4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=?
执行push,指针减小,每次占用两个字节,60H-2*5 = 56H
5.对于一个十进制数 – 65,其二进制补码表示形式为多少?
(65)2 = 1000001,取反0111110,加一0111111,加符号10111111
三. 排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。
1.PUSH 5588H ;push的源操作数不能是立即数
2.MOV DS, 1720H ;给段寄存器赋值不能给立即数
3.ADD AX, CL ;AX是16位的,CL是8位的,不能相加
4.AND AX,[DX] ;DX不是基址寄存器
四.程序分析题(本大题共6小题,每小题5分,共30分)每小题列出了一段小的程序片段和相关存储单元的初始值,请按题目的要求分析各程序片段的运行结果。(寄存器中的内容请使用十六进制形式给出)
1.阅读如下程序片段
MOV AL,4CH
MOV BL,0B5H
ADD AL,BL
执行上述程序片段后,(AL)= 1H,(BL)=B5H ,
CF= 1,OF=0 ,PF=0 .
2.阅读如下程序片段
MOV AL,0F3H
MOV DL,0C4H
ADD AL,DL
AND AL,0FH
执行上述程序片段后,(AL)=7 ,(AF)=0 ,CF=0 ,OF=0 ,PF=1.
3.阅读如下程序片段
MOV AL,7EH
MOV CL,04H
ROL AL,CL
执行上述程序片段后,(AL)= e7H,(CL)=4 ,
CF=1 ,OF=0 .
4.阅读如下程序片段
MOV AX,0632H
MOV BX,0C202H
SUB AX,BX
INC AX
执行上述程序片段后,(AX)=4431H ,(CF)= 1,
OF= 0.
5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)=28H
MOV BX,0024H ;bx = 24h
LEA BX,[BX] ;bx = 56h,cf=1
OR BX,0 ;bx=56h, cf=0
ADC BX,[BX] ;应该加56H那个单元的内容
执行上述程序片段后,(BX)= 56H+[01056H],(CF)=取决于[01056H]是多少,
OF= 取决于[01056H]是多少,.
这道题如果不是你贴错了,就是出题的搞错了
6.阅读如下程序片段,假设(SP)=0064H
MOV AX,0001H
MOV BX,0002H
PUSH AX
PUSH BX
POP CX
POP BX
执行上述程序片段后,(AX)= 1,(BX)=1 ,
(SP)= 64H,
五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分)
1.试编写一程序片段,实现BL高4位与低4位相互交换(7分)
push ax
mov al,bl
shl bx,1
shl bx,1
shl bx,1
shl bx,1
and al,f0
shr ax,1
shr ax,1
shr ax,1
shr ax,1
and al,0f
or bl,al
pop ax
2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功能(AX中的数据理解为补码)(8分)
push bx
mov bx,ax
shl ax,1
shl ax,1
add ax,bx
add ax,14
shr ax,1
pop bx
2.物理地址 内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可惟一标识一个存储单元,称为内存地址(或物理地址)。
3.标志寄存器 用来保存程序执行结果或者状态的寄存器,由各个标志位组成,标志寄存器中的标志位分两种类型:状态标志位和控制标志位,分别用来反应结果状态或控制程序执行的。
状态标志位常用的有ZF(零标志位)、SF(符号标志位)、PF(奇偶标志位)、CF(进位标志位)、OF(溢出标志位)、AF(辅助进位标志位);
控制标志位常用的有DF(方向标志位,用于串处理操作方向控制的)、TF(单步执行的跟踪标志位)、IF(中断允许标志位)。
4.存储器寻址方式 在指令中,有时要寻找操作数的地址,有时要寻找转移地址(如转移指令、CALL指令等),这些寻找地址的方式就称为寻址方式。8086微处理器寻找操作数地址有七种方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等;寻找转移地址的方式有段内寻址和段间寻址,它们又分为段内直接、段内间接、段间直接、段间间接寻址等。
5.补码 补码是计算机底层运算中,对运算符的一种表示方法。主要功能是将减法的运算转化为加法运算。
简单的说对于一个二进制数来说,正数的话它的原码,反码,补码都一样.
如果机器数是负数,反码是对它的原码(符号位除外)各位取反而得到的.
补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。
1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少?
(1100100)2, (64)16
2.假设(DS)=0B00H,(BX)=0210H,对于指令MOV DS:120H[BX],AL,其目的操作数的物理地址为多少?
0B00H*10H+210H+120H = B330H
3.假设(BX)=0210H,(DI)=0060H,对于指令ADD DL,[BX][DI],其源操作数的偏移量为多少?
这道题说的不明白,偏移量是相对于谁的,如果相对于段,210H+60H=270H
如果相对于基址,就是DI,60H
4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=?
执行push,指针减小,每次占用两个字节,60H-2*5 = 56H
5.对于一个十进制数 – 65,其二进制补码表示形式为多少?
(65)2 = 1000001,取反0111110,加一0111111,加符号10111111
三. 排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。
1.PUSH 5588H ;push的源操作数不能是立即数
2.MOV DS, 1720H ;给段寄存器赋值不能给立即数
3.ADD AX, CL ;AX是16位的,CL是8位的,不能相加
4.AND AX,[DX] ;DX不是基址寄存器
四.程序分析题(本大题共6小题,每小题5分,共30分)每小题列出了一段小的程序片段和相关存储单元的初始值,请按题目的要求分析各程序片段的运行结果。(寄存器中的内容请使用十六进制形式给出)
1.阅读如下程序片段
MOV AL,4CH
MOV BL,0B5H
ADD AL,BL
执行上述程序片段后,(AL)= 1H,(BL)=B5H ,
CF= 1,OF=0 ,PF=0 .
2.阅读如下程序片段
MOV AL,0F3H
MOV DL,0C4H
ADD AL,DL
AND AL,0FH
执行上述程序片段后,(AL)=7 ,(AF)=0 ,CF=0 ,OF=0 ,PF=1.
3.阅读如下程序片段
MOV AL,7EH
MOV CL,04H
ROL AL,CL
执行上述程序片段后,(AL)= e7H,(CL)=4 ,
CF=1 ,OF=0 .
4.阅读如下程序片段
MOV AX,0632H
MOV BX,0C202H
SUB AX,BX
INC AX
执行上述程序片段后,(AX)=4431H ,(CF)= 1,
OF= 0.
5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)=28H
MOV BX,0024H ;bx = 24h
LEA BX,[BX] ;bx = 56h,cf=1
OR BX,0 ;bx=56h, cf=0
ADC BX,[BX] ;应该加56H那个单元的内容
执行上述程序片段后,(BX)= 56H+[01056H],(CF)=取决于[01056H]是多少,
OF= 取决于[01056H]是多少,.
这道题如果不是你贴错了,就是出题的搞错了
6.阅读如下程序片段,假设(SP)=0064H
MOV AX,0001H
MOV BX,0002H
PUSH AX
PUSH BX
POP CX
POP BX
执行上述程序片段后,(AX)= 1,(BX)=1 ,
(SP)= 64H,
五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分)
1.试编写一程序片段,实现BL高4位与低4位相互交换(7分)
push ax
mov al,bl
shl bx,1
shl bx,1
shl bx,1
shl bx,1
and al,f0
shr ax,1
shr ax,1
shr ax,1
shr ax,1
and al,0f
or bl,al
pop ax
2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功能(AX中的数据理解为补码)(8分)
push bx
mov bx,ax
shl ax,1
shl ax,1
add ax,bx
add ax,14
shr ax,1
pop bx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询